如何仅使用 2 个欧拉角将源向量旋转到目标(到最近的向量)

How rotate source vector to target (to nearest vector) by using only 2 Euler angles

我需要通过仅围绕两个轴 YZ 旋转将源 3D 矢量旋转到目标矢量。

我有两个电机绕 Y 轴旋转然后绕 Z 轴旋转的机制。我有随机源向量附加到这个机制。

我认为源向量不能通过仅使用 2 个角度旋转到随机目标 3D 向量,我需要将它旋转到最接近目标向量。

我只需要对齐方向,不需要对齐坐标。

使用旋转矩阵、四元数等的最佳方法是什么?

我可以计算从源向量到目标向量的最短ArcQuat。然后将目标向量乘以这个 quat 的倒数。然后从旋转矩阵中得到 YZ 角度,将上一个操作的结果作为 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是向量E2旋转了R^T: S = R^T E2

b = - atan2( S • E1, S • E2)

我刚刚推导出这些方程式,因此未经测试,可能存在一些错误。照原样。