我需要以下c#代码:
我有两点(2D)。这些点位于半径为r的圆上。我知道每个点的切线角度。我需要抓住圆圈中点。
//托马斯
我知道这不是c#,但是我希望遇到一个解决了这个问题的人。
答案 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的一切。