在下图中,我需要找到从A到B的弧的中点M:
我想根据以下信息找到M:
如何计算M的坐标?
答案 0 :(得分:5)
假设A
,B
,M
和Center
是具有常规操作的某种矢量类型的对象:
var a = A-C;
var b = B-C;
var m = a+b;
m
是一个从Center
到M
的向量。因此:
m = m.Normalize() * Radius;
M = Center + m;
请注意:此算法不假设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;
}
然后rotate a
一半的角度:
angle /= 2;
var m = a.Rotate(angle);
M = Center + m;