如何仅使用 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)
我刚刚推导出这些方程式,因此未经测试,可能存在一些错误。照原样。
我需要通过仅围绕两个轴 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)
我刚刚推导出这些方程式,因此未经测试,可能存在一些错误。照原样。