使用起点/终点/中心点和轴

时间:2015-07-28 15:23:11

标签: math

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

  • Start指向坐标(Xs,Ys,Zs)
  • End指向坐标(Xe,Ye,Ze)
  • Center指向坐标(Xc,Yc,Zc)
  • Axis向量与组件(Xa,Ya,Za)

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

示例:

Arc {
  Start   { -18.123, -11.805, 0 },
  End     { -17.167,  -0.553, 0 },
  Center  {  -9.421,  -6,877, 0 },
  Axis    { 0, 0, -1 }
}

注意:在此示例中,弧具有顺时针方向

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

欢迎提供一些帮助。

1 个答案:

答案 0 :(得分:2)

假设您的数据全部是自洽的(中心必须与起点和终点等距,并且轴应垂直于包含起点,终点和中心的平面),弧长是以弧度为单位的度量角度开始 - >中心 - >结束乘以半径(从中心到开始的距离,或等效地,从中心到结束的距离)。可以通过余弦定律找到角度的度量:C^2 = A^2 + B^2 - 2AB cos theta其中C是从开始到结束的距离,A是从中心到开始的距离,B是从中心到结束的距离。在这种情况下,公式可以简化为C^2 = 2R^2 - 2R^2 cos theta,可以求解cos theta,然后使用反余弦来获得theta

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

反余弦的主要分支,如果使用库函数arccos,则会得到短角度。你需要另一种方法来确定正确的角度是短还是长。

我建议的方法是使用cross product。感兴趣的公式是

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

其中a是向量开始 - 中心,b是向量End - Center|a|=|b|=Rn是由您的轴确定的单位向量。根据余弦定律,您已经或多或少地具有角度θ,因此您不需要计算arcsin;此时你真正感兴趣的是sin(theta)的标志。如果a x bn方向相同,sin(theta)>0并采用余弦定律确定的短弧。如果a x bn方向相反,sin(theta)<0,则采用余弦定律确定的长弧。

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