计算具有起点/终点/中心点和轴的弧长



我需要用一些数据计算弧长:

  • Start点坐标(Xs, Ys, Zs)
  • End点坐标(Xe, Ye, Ze)
  • Center点坐标(Xc, Yc, Zc)
  • 分量为(Xa, Ya, Za)的Axis矢量

ArcStart点开始,在End点结束,其半径等于DistanceBetween(Center, Start)DistanceBetween(Center, End),其方向由Axis向量定义。

例子:

<>之前弧{开始{-18.123,-11.805,0},结束{-17.167,-0.553,0},中心{-9.421,-6,877,0},轴{0,0,-1}}之前

注意:在这个例子中,圆弧是顺时针方向的

我的问题是:我可以计算大长度或小长度,但我无法根据轴的方向确定好的值。

假设您的数据都是自洽的(中心必须与起点和终点等距,轴应该垂直于包含起点、终点和中心的平面),弧长是角度start -> center -> end乘以半径(从中心到起点的距离,或等价地,从中心到终点的距离)的弧度度量。角度的度量可以通过余弦定律找到:C^2 = A^2 + B^2 - 2AB cos theta,其中C是从Start到End的距离,A是从Center到Start的距离,B是从Center到End的距离。在这种情况下,公式可以简化为C^2 = 2R^2 - 2R^2 cos theta,可以解出cos theta,然后取反余弦得到theta

如果我理解正确的话,你已经走了那么远,但问题是cos的逆通常有两个值,对应于开始和结束之间的短弧和长弧,你不知道该选哪个。

如果你使用库函数arccos,你会得到逆余弦的主干,它总是给出短角度。你需要另一种方法来确定正确的角度是长还是短。

我推荐的方法是使用叉乘。公式为

a x b = |a| |b| sin(theta) n

其中a是矢量Start - Center, b是矢量End - Center, |a|=|b|=R, n是由坐标轴确定的单位矢量。根据余弦定律,你已经有了角度,所以你不需要计算arcsin;现在你真正感兴趣的是sin(theta)的符号。如果a x bn在同一方向,sin(theta)>0和你取由余弦定律决定的短弧。如果a x bn在相反的方向,sin(theta)<0,并且你取由余弦定律确定的长弧。

你可以通过取a x bn的点积来判断它们是在相同的方向还是相反的方向。如果点积是正的,它们方向相同。

最新更新