算法 - 查找弧的中点

5
在下面的图示中,我需要找到从A到B的弧线的中点M: midpoint 我想要根据以下信息找到M的坐标:
- A.X和A.Y,A的坐标 - B.X和B.Y,B的坐标 - Radius,弧线的半径 - Center.X和Center.Y,弧线的中心点
如何计算M的坐标?

4
这里实际上没有问题。 - Preston Guillot
1
听起来是一个有趣的问题。你解决它进展到哪一步了? - Roman
问题是我需要使用什么算法来找到弧的中点的X和Y? - michaelbr92
这很简单!为什么问题被阻止了? - Juan Leni
2
这不是数学而不是编程吗? - MrKWatkins
显示剩余5条评论
1个回答

7
假设ABMCenter是某种矢量类型的对象,并具有通常的操作:
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;
}

然后将 a 按该角度的一半旋转:rotate
angle /= 2;
var m = a.Rotate(angle);
M = Center + m;

有一个更好的答案,不需要三角函数调用,可以参考https://dev59.com/BW855IYBdhLWcg3w3Ibr?rq=1 - Goodies
1
@好物中心 圆的中心不是弧的中心。 - kagronick
@kagronic 当弧线不是椭圆形时,我们谈论的是同一个中点。我所提到的提交是一个简单的三点居中计算,适用于任何圆弧段。如果您认为这无效,请联系您的数学老师。 - Goodies
@Goodies 弧的中点在圆的边缘,圆的中心在圆的中间。它们是完全不同的东西。那个问题使用了3个点,而这个问题只使用了2个点和半径。 - kagronick
@kagronick 你是正确的,我混淆了M和中心。但是当弧线的中心(Xc,Zc)已知时,上面弧线的中点M可以很容易地找到,即M=(Xc,Zc + distance(C,A))。 当弧线倾斜时,您可以连接A和B,找到中间点和正交平面,进行标准化,然后用冠高乘以向量来找到M。无论如何,先计算C将有助于找到M。 - Goodies
http://mathcentral.uregina.ca/RR/database/RR.09.10/akulov2.html - Goodies

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接