math - 在本地和世界坐标系中旋转
问题描述
让我们考虑一个简单的情况,我们有一个带有变换矩阵的对象,然后我们进行简单的变换:
- 将 x 轴旋转 X1 角度 -> 一个矩阵
- 通过 Y1 角度旋转 y 轴 -> B 矩阵
- 通过 X2 角度旋转 x 轴 -> C 矩阵
在通常情况下,我会做 C * B * A ,这将是一个故事的结尾。但正如我们所知,它所做的是在由先前变换创建的局部坐标系中应用新变换。我不喜欢它。
在某些情况下,我想做的是在本地和其他时间在世界坐标系中旋转。我的意思是,如果我有矩阵 M = B * A(但我没有可用的 X1 和 Y1 角度;我只有 M)并且我想在世界坐标系中应用 C,然后输出新的变换矩阵将具有以下内容:
- x 旋转 = X1 + X2
- y 旋转 = Y1
有没有办法实现它?
编辑
我想我解释错了。
假设我们在矩阵 M 描述的位置有一个对象 A。M 具有旋转、缩放和平移。我想沿着位于对象 A 中心但平行于基本坐标系的轴的轴旋转对象。毕竟我还希望对象在基本坐标系中停留在 (x,y,z) 处。
解决方案
在通常情况下,我会做 C * B * A ,这将是一个故事的结尾。但正如我们所知,它所做的是在由先前变换创建的局部坐标系中应用新变换。
不正确。
考虑一个测试点p
。的B * A * p
局部坐标系中的坐标B * A
只是 的世界空间分量p
——因为变换只是坐标系的变化。
因此,替换p
为在本地C * p
应用转换,即:
C * (B * A)
适用C
于世界坐标系(B * A) * C
适用C
于局部坐标系B * A
编辑
围绕其位置旋转对象p
:
- 翻译者
-p
- 应用所需的旋转矩阵
C
- 翻译
+p
为恢复原来的位置
最终矩阵是T * C * inv(T) * M
,其中T
是 的平移p
,并且M
是原始矩阵。p
由 的最后一列给出M
。
推荐阅读
- css - 向下滚动时删除 AMP-Animation 中的 div
- html - 将 div 放在图像下方
- ios - 如何计算 iOS 中网络连接测试的有效负载大小和超时长度?
- java - 不能将 int 字段设置为空值
- javascript - Html 必需属性不适用于按钮功能
- kubernetes - 运行 Kubernetes Minikube 服务给我“无法打开浏览器”错误
- java - slf4j 不通过 logback.xml 管理
- reactjs - 如何触发突变,反应 + Apollo 2.1
- javascript - 为什么更改文本区域会阻止使用 AJAX 将内容加载到其中?
- javafx - JavaFX 我想用非基本数据类型填满我的表