算法-找到圆弧的中点

mic*_*r92 2 c# algorithm geometry computational-geometry

在下图中,我需要找到从A到B的弧的中点M:

中点

我想根据以下信息找到M:

  • AX和AY,A的坐标
  • BX和BY,B的坐标
  • 半径,圆弧半径
  • Center.X和Center.Y,圆弧的中心

如何计算M的坐标?

Seb*_*zus 5

假设ABMCenter与通常的操作的一些矢量类型的对象:

var a = A-C;
var b = B-C;
var m = a+b;
Run Code Online (Sandbox Code Playgroud)

m是从Center到的向量M。因此:

m = m.Normalize() * Radius;
M = Center + m;
Run Code Online (Sandbox Code Playgroud)

请注意:此算法不假设A和B的顺序,并且始终将弧解释为两个可能的弧中较小的一个。在不增加特殊情况的情况下,它只能处理角度小于180°的弧。

处理顺序:首先使用atan2计算从a到b的角度:

var angle = Math.Atan2(b.y, b.x) - Math.Atan2(a.y, a.x);
if (angle < 0)
{
    angle = 2*Math.PI + angle;
}
Run Code Online (Sandbox Code Playgroud)

然后旋转 a该角度的一半:

angle /= 2;
var m = a.Rotate(angle);
M = Center + m;
Run Code Online (Sandbox Code Playgroud)