使用起点、终点、中心点和轴计算弧长

3
我需要使用一些数据计算弧长:
- 起点坐标为 (Xs, Ys, Zs) - 终点坐标为(Xe, Ye, Ze) - 圆心坐标为(Xc, Yc, Zc) - 轴向量分量为(Xa, Ya, Za)
圆弧从起点开始,终点结束,半径等于圆心到起点和终点之间的距离,并且其方向由轴向量定义。
例如:
Arc { Start { -18.123, -11.805, 0 }, End { -17.167, -0.553, 0 }, Center { -9.421, -6,877, 0 }, Axis { 0, 0, -1 } }
注意:在这个例子中,弧度是顺时针方向的。
我的问题是:我能够计算出大或小的弧长,但我不能根据轴的方向确定正确的值。希望得到一些帮助。

我可能错了,但是你不觉得有可能会出现无法构成弧的输入数据吗?给定一个“起点”和“终点”,圆心只能是平面上与两个点距离相等的任意点。使用“半径”参数会不会更好呢? - pingul
1个回答

2
假设您的数据都是自洽的(中心必须与起点和终点等距,轴应垂直于包含起点、终点和中心的平面),圆弧长度是从起点到终点连线与通过起点、终点和中心的平面之间的夹角的弧度测量值乘以半径(从中心到起点的距离或等效地,从中心到终点的距离)。可以通过余弦定理找到该角度的度量:其中C是起点到终点的距离,A是中心到起点的距离,B是中心到终点的距离。C^2 = A^2 + B^2 - 2AB cos theta在这种情况下,公式可以简化为C^2 = 2R^2 - 2R^2 cos theta,可以解出cos theta,然后取反余弦以获得theta
如果我理解正确,您已经掌握了这个方法,但问题在于一般情况下逆余弦函数有两个值,分别对应于从起点到终点的短弧和长弧,而您不知道应该选择哪一个。
逆余弦函数的主分支总是给出短角。您需要另一种方法来确定正确的角度是短弧还是长弧。
我建议使用向量积。感兴趣的公式是:
a x b = |a| |b| sin(\theta) n

其中a是向量Start-Center,b是向量End-Center|a|=|b|=Rn是由您的轴确定的单位向量。您已经从余弦定律中得到了角度theta,所以不需要计算arcsin;此时您真正感兴趣的只是sin(theta)的符号。如果a x bn方向相同,则sin(theta)>0,并且您采用由余弦定律确定的短弧。如果a x bn方向相反,则sin(theta)<0,并且您采用由余弦定律确定的长弧。

您可以通过取它们的点积来判断a x bn是否方向相同或相反。如果点积为正,则它们方向相同。如果点积为负,则它们方向相反。


非常感谢您的帮助。 - alex

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