C# 求圆心

C# 求圆心,c#,trigonometry,C#,Trigonometry,我需要一些c#代码来实现以下功能: 我有两点(2D)。这些点位于半径为r的圆上。我知道每个点的切线角。我需要抓住圆的中点 //托马斯 好吧,我想我有点不清楚。见下图。点P1位于直线的末端,直线的角度为1。点P2位于角度为2的直线的起点。我知道P1和P2的坐标。我也知道1和2的角度。在P1和P2之间形成半径,我需要知道(不可见)圆的中心点Pc,该圆由P1、P2、At1和At2形成。点P1和P2可以位于坐标系中的任何位置 我知道这不是c#,但我希望能遇到解决这个问题的人 如果不知道这些点在圆上彼此

我需要一些c#代码来实现以下功能:

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

//托马斯


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

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


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

否则,它很简单:

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

Point mid = new Point((pt1.X + pt2.X) / 2, (pt1.Y + pt2.Y) / 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的所有信息。

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

如果它们不平行,则可以从已知的P1和P2开始,绘制两条与切线角垂直的直线。如果求解这两条线的交点,则该交点将为Pc

我现在没有时间写完整的C#math并测试它,但一些伪代码可能是:

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;
    }
}

你所说的“切角”是什么意思?如果这是作业,请把它标记成这样。你是在找r还是中点?你有r点还是中点?如果不知道这些点在圆上彼此距离最远,那么它们可以在无限多的圆上。如果没有中点或r,则一个圆上至少需要3个点来确定其半径,或者它具有无限的可能性。由于不知道这些点是否彼此直接相对,或者是什么,尽管它们之间有一个已知的角度,我想这将是无限可能性数量的一半。。。