我需要通过仅围绕两个轴YZ旋转来将源3D矢量旋转到目标矢量。
我有机制,2个电机围绕Y旋转,然后绕Z.我有随机源矢量附加到这个机制。
我认为源矢量不能通过仅使用2个角度旋转到随机目标3D矢量,我需要将其旋转到最接近目标矢量。
我只需要对齐方向,而不是坐标。
使用旋转矩阵,四元数等的最佳方法是什么?
我可以计算从源向量到目标的shortestArcQuat。然后将目标矢量乘以该四元组的倒数。然后从旋转矩阵获得YZ角度,并将prev操作的结果作为Z向量,但我认为这是错误的。
解决方案应该是分析性的。
为了清楚起见,让我定义单位向量
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是由R旋转的向量E3: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)
我刚刚推导出这些方程式,所以这是未经测试的,可能存在一些错误。按原样使用。