提问者:小点点

找到圆的中心


我需要一些c#代码用于以下内容:

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

托马斯

好的,我想我有点不清楚。见下图。点P1在一条线的末尾,这条线的角度是At1。点P2在一条角为At2的线的开头。我知道P1和P2的坐标。我也知道角At1和At2。半径在P1和P2之间形成,我需要知道由P1、P2、At1和At2组成的(不可见的)圆的中心点Pc。点P1和P2可以在坐标系统中的任何地方。

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

见图像


共3个答案

匿名用户

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

否则,很简单:

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

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

匿名用户

首先,检查切角是否平行。如果是,那么你需要做的就是根据约尔耶·内森的解找到它们之间的中点(因为它们都沿着圆的直径)。

如果它们不平行,那么您可以从已知的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个点,坐标为(x1,y1),(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的一切。

相关问题