matrix - 如何仅使用 2 个欧拉角将源向量旋转到目标(到最近的向量)
问题描述
我需要通过仅围绕两个轴 YZ 旋转将源 3D 向量旋转到目标向量。
我有 2 个电机围绕 Y 旋转然后围绕 Z 旋转的机制。我在这个机制上附加了随机源矢量。
我认为源向量不能通过仅使用 2 个角度旋转到随机目标 3D 向量,我需要将其旋转到最接近目标向量。
我只需要对齐方向,而不是坐标。
使用旋转矩阵、四元数等的最佳方法是什么?
我可以计算从源向量到目标的 shortestArcQuat。然后将目标向量乘以这个 quat 的倒数。然后从旋转矩阵中获取 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)
我刚刚导出了这些方程,所以这是未经测试的,可能会有一些错误。照原样接受。
推荐阅读
- reactjs - 如何从 React Hooks Form 7.0 中的文本字段中排除特殊字符
- performance - 在 OWASP Benchmark 中生成安全工具之间比较的正确结果的问题
- installation - Openstack 的 Freezer 安装过程中的 Keystone 异常
- javascript - 突出显示重复的名称
- reactjs - 反应分页和搜索组件编号错误
- java - GWT 按钮栏工具栏在 Chrome 中显示为下拉菜单(其他浏览器有单独的按钮)
- c++ - 使用 cout 后损坏的对象数组
- android - Expo深度链接反应原生Android
- wordpress - Woocommerce 为可变产品的特定变体创建自定义标题
- python - flask-sqlalchemy 从数据库中获取 2 个日期之间的差异