如何找到2个3D向量之间的3个欧拉角?
当我有一个Vector且想要旋转时,通常可以使用此链接:Calculate rotations to look at a 3D point?
但是,当根据彼此进行计算时,我该怎么做呢?
最佳答案
正如其他人已经指出的那样,您的问题应予以修改。让我们将向量称为a
和b
。我假设使用length(a)==length(b) > 0
,否则我将无法回答问题。
计算向量的cross product。 v = a x b
给出旋转的轴。通过计算dot product,您可以得到角的余弦,应使用v
旋转,使用cos(angle)=dot(a,b)/(length(a)length(b))
可以唯一地确定角度(@Archie,感谢您指出我之前的错误)。此时,您的旋转角度为轴表示。
剩下的工作是将这种表示形式转换为您要寻找的表示形式:欧拉角。正如您所发现的,Conversion Axis-Angle to Euler是一种实现方法。当使用acos
时,即角度为0或180度时,您必须处理退化的情况。
我个人不喜欢Euler角度,它们破坏了应用程序的稳定性,并且不适合插值,另请参见
关于math - 两个3d向量之间的欧拉角,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15101103/