找到圆的中心

时间:2012-05-08 14:28:01

标签: c# trigonometry

我需要以下c#代码:

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

//托马斯


好的,我觉得我有点不清楚。见下图。点P1位于一条线的末端,该线具有角度At1。点P2位于具有角度At2的线的开始处。我知道P1和P2的坐标。我也知道角度At1和At2。在P1和P2之间形成半径,并且我需要知道由P1,P2,At1和At2形成的(不可见)圆的中心点Pc。点P1和P2可以在坐标系中的任何位置。

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

See image

3 个答案:

答案 0 :(得分:1)

如果不知道这些点在圆圈上距离彼此最远,则可以使用无限量的圆圈。

否则,很简单:

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

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

答案 1 :(得分:0)

首先,检查切线角是否平行。如果它们是,那么你需要做的就是根据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;
    }
}

答案 2 :(得分:-1)

假设在坐标为(x1,y1)的圆上有2个点,(x2,y2)和点(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的一切。