我只需要绕两个轴YZ旋转就可以将源3D矢量旋转到目标矢量。
我有一个机制,其中有2个电机绕Y旋转,然后绕Z旋转。我将随机源矢量附加到该机制。
我认为不能仅使用2个角度将源矢量旋转为随机目标3D矢量,而我需要将其旋转至最接近目标矢量。
我只需要对齐方向,而不是坐标即可。
使用旋转矩阵,四元数等的最佳方法是什么?
我可以计算从源向量到目标的shortestArcQuat。然后将目标向量乘以该quat的倒数。然后从旋转矩阵中得到YZ角,并将上一个运算的结果作为Z向量,但是我认为这是错误的。
解决方案应该是分析性的。
答案 0 :(得分:0)
为清楚起见,让我定义单位矢量
E1 = (1,0,0)
E2 = (0,1,0)
E3 = (0,0,1)
鉴于旋转矩阵R,目标是将其分解为两个旋转矩阵,分别围绕轴E2旋转角度“ a”和围绕轴E3旋转角度“ b”:
R = exp(a E2) exp(b E3)
将两边都乘以E3
R E3 = exp(a E2) exp(b E3) E3
我们得到:
W = exp(a E2) E3
其中W是向量E3旋转R:W = R E3
a = atan2( W • E1, W • E3)
其中(•)是点积。
现在将R转置,我们得到:
R^T = exp(b E3)^T exp(a E2)^T
将两边都乘以E2:
R^T E2 = exp(b E3)^T exp(a E2)^T E2
R^T E2 = exp(-b E3) exp(-a E2) E2
S = exp(-b E3) E2
其中S是由R ^ T旋转的向量E2:S = R ^ T E2
b = - atan2( S • E1, S • E2)
我刚刚导出了这些方程式,因此未经测试,可能会出错。照原样。