【问题标题】:Find center of a circle找到圆心
【发布时间】:2012-05-08 14:28:00
【问题描述】:

我需要一些 c# 代码:

我有两点 (2D)。这些点在半径为 r 的圆上。我知道每个点的切线角。我需要抓住圆的中点。

//托马斯


好的,我想我有点不清楚。见下图。点 P1 位于直线的末端,直线的夹角为 At1。点 P2 位于角度为 At2 的直线的起点。我知道 P1 和 P2 的坐标。我也知道角度 At1 和 At2。在 P1 和 P2 之间形成一个半径,我需要知道由 P1、P2、At1 和 At2 形成的(不可见)圆的中心点 Pc。点 P1 和 P2 可以在坐标系中的任何位置。

我知道这不是 c#,但是我希望遇到解决这个问题的人。

See image

【问题讨论】:

  • “切角”是什么意思?
  • 如果这是家庭作业,请注明。
  • 您在寻找 r 还是中点?你也有 r 或中点吗? en.wikipedia.org/wiki/Circle#Equation
  • 如果不知道圆上的点彼此相距最远,那么它们可以在无限多的圆上。
  • 如果你没有中点或 r,你需要在一个圆上至少 3 个点来确定它的半径,或者它有无限的可能性。因为它不知道这些点是否直接相对或者什么,虽然它们之间的角度已知,但我猜它会是无限可能性的一半......

标签: c# trigonometry


【解决方案1】:

如果不知道圆上的点彼此相距最远,那么它们可以在无数个圆上。

否则,很简单:

Point pt1 = ...
Point pt2 = ...

Point mid = new Point((pt1.X + pt2.X) / 2, (pt1.Y + pt2.Y) / 2);

【讨论】:

    【解决方案2】:

    首先,检查切角是否平行。如果是,那么您需要做的就是根据 Yorye Nathan 的解决方案找到它们之间的中点(因为它们都位于圆的直径上)。

    如果它们不平行,那么您可以从已知的 P1 和 P2 开始绘制两条垂直于切角的线。如果你解决了这两条线的交点,那么那个交点就是 Pc。

    我现在没有时间编写完整的 C# 数学并对其进行测试,但您可能需要一些伪代码:

    public Point CalculateCircleCentre(Point p1, Degrees tangent1, Point p2, Degrees tangent2)
    {
        if (AreAnglesParallel(tangent1, tangent2))
        {
            return Midpoint(p1, p2);
        }
        else
        {
            var line1 = new Line(p1, tangent1 + 90);
            var line2 = new Line(p2, tangent2 + 90);
            var intersectionPoint = FindIntersection(line1, line2);
    
            return intersectionPoint;
        }
    }
    

    【讨论】:

      【解决方案3】:

      假设您在坐标为 (x1, y1), (x2, y2) 的圆上有 2 个点,点 (x3, y3) 是半径为 r 的圆的中心,您只需找到 x3 和y3。解决这个系统:

      (x3-x1)^2+(y3-y1)^2=r^2
      (x3-x2)^2+(y3-y2)^2=r^2
      

      扩展到

       x3*x3-2*x3*x1+x1*x1 + y3*y3-2*y3*y1+y1*y1 = r*r
      
       x3*x3-2*x3*x2+x2*x2 + y3*y3-2*y3*y2+y2*y2 = r*r
      
      2*x3*(x2-x1) + 2*y3*(y2-y1) + x1*x1 + x2*x2 + y1*y1 + y2*y2 = 0
      

      您现在可以用这个长表达式替换 x3 并找到 y3

      x3 = (2*y3*(y1-y2) - (x1*x1 + x2*x2 + y1*y1 + y2*y2)) / (2*(x2-x1))
      

      之后你就会知道找到 x3 的一切。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-10-24
        • 1970-01-01
        • 2020-06-01
        • 1970-01-01
        • 2012-10-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多