两个 3d 向量之间的欧拉角 [英] Euler angles between two 3d vectors
问题描述
如何找到 2 个 3D 向量之间的 3 个欧拉角?当我有一个向量并且我想获得它的旋转时,通常可以使用此链接:计算旋转以查看 3D 点?
但是互相计算的时候怎么办呢?
How do you find the 3 euler angles between 2 3D vectors?
When I have one Vector and I want to get its rotation, this link can be usually used: Calculate rotations to look at a 3D point?
But how do I do it when calculating them according to one another?
推荐答案
正如其他人已经指出的那样,您的问题应该修改.我们称您的向量为 a
和 b
.我假设 length(a)==length(b) >0
否则我无法回答问题.
As others have already pointed out, your question should be revised. Let's call your vectors a
and b
. I assume that length(a)==length(b) > 0
otherwise I cannot answer the question.
计算向量的叉积 v = axb
;v
给出了旋转的轴.通过计算点积,可以得到角度的余弦strong> 你应该用 cos(angle)=dot(a,b)/(length(a)length(b))
旋转,用 acos
你可以唯一确定角度(@Archie 感谢您指出我之前的错误).至此,您就有了旋转的轴角度表示.
Calculate the cross product of your vectors v = a x b
; v
gives the axis of rotation. By computing the dot product, you can get the cosine of the angle you should rotate with cos(angle)=dot(a,b)/(length(a)length(b))
, and with acos
you can uniquely determine the angle (@Archie thanks for pointing out my earlier mistake). At this point you have the axis angle representation of your rotation.
剩下的工作就是将此表示转换为您正在寻找的表示:欧拉角.将轴角转换为欧拉是一种方法它,正如你所发现的那样.当 v = [ 0, 0, 0]
时,即角度为 0 或 180 度时,您必须处理简并情况.
The remaining work is to convert this representation to the representation you are looking for: Euler angles. Conversion Axis-Angle to Euler is a way to do it, as you have found it. You have to handle the degenerate case when v = [ 0, 0, 0]
, that is, when the angle is either 0 or 180 degrees.
我个人不喜欢欧拉角,它们会破坏应用的稳定性,并且不适合插值,另请参阅
I personally don't like Euler angles, they screw up the stability of your app and they are not appropriate for interpolation, see also
这篇关于两个 3d 向量之间的欧拉角的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!