我需要用一些数据来计算弧长:
Start
指向坐标(Xs,Ys,Zs)End
指向坐标(Xe,Ye,Ze)Center
指向坐标(Xc,Yc,Zc)Axis
向量与组件(Xa,Ya,Za) Arc
从Start
点开始,在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 } }
注意:在此示例中,弧具有顺时针方向
我的问题是:我可以计算大或小的长度,但我无法根据轴的方向确定好的值。
欢迎提供一些帮助。
答案 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|=R
,n
是由您的轴确定的单位向量。根据余弦定律,您已经或多或少地具有角度θ,因此您不需要计算arcsin
;此时你真正感兴趣的是sin(theta)
的标志。如果a x b
和n
方向相同,sin(theta)>0
并采用余弦定律确定的短弧。如果a x b
和n
方向相反,sin(theta)<0
,则采用余弦定律确定的长弧。
您可以通过获取点积来判断a x b
和n
是否在相同或相反的方向。如果点积为正,则它们的方向相同。如果点积为负,则它们的方向相反。