我在3D空间中有一个3D对象,朝向某个方向。我怎么知道它已经从其初始旋转q(在欧拉角:0,0,0)中旋转,只在任意轴上以任意数量的15度旋转。例如,在X轴上旋转4 * 15度,在Y轴上旋转7 * 15度,在Z轴上旋转13 * 15度。我怎么能发现这个?
我试图从物体的旋转矩阵中取出欧拉角,但是只有当我只在一个轴上旋转时它似乎才能正确检测到这种情况。如果我开始将X,Y和Z轴混合15度旋转,则欧拉角会变得混乱。
我100%确定对象仅以15度块旋转。
答案 0 :(得分:0)
旋转矩阵只能分解为四元数,我相信,不能分解为每轴旋转。
答案 1 :(得分:0)
我不确定您使用的数学库,但是,如果提供,您可以使用四元数,这将非常简单您想要的功能。之后它们可以转换为旋转矩阵。
答案 2 :(得分:0)
如果可以的话,最简单的方法是存储组件(float3 m_Translation, m_Rotation, m_Scale
)和每当它们发生变化时更新的矩阵(float4x4 m_Matrix
)。要获取数据,只需抓取该部分的向量并将其返回。内存使用量很小(12-16个浮点数),计算开销很小(更新部件时重新计算矩阵)。
但是,如果无法做到这一点,Google建议您可以通过一些工作like so来分解旋转矩阵。它需要一大堆数学。
如该页面所述,D3DX库还具有分解矩阵的功能:D3DXMatrixDecompose
。
答案 3 :(得分:0)
旋转不是可交换的,因此如果您不知道正确的顺序,则用欧拉角描述它们是有问题的。如果您知道顺序,则可以设置一个方程式系统,其一侧乘以三个旋转矩阵(由旋转角度参数化),另一侧乘以最终旋转矩阵。给你三个方程和三个未知数。但要注意欧拉角表示中的奇点!