如何知道该对象仅在3D中以15度块旋转?

时间:2011-06-30 13:37:45

标签: c++ math object 3d rotation

我在3D空间中有一个3D对象,朝向某个方向。我怎么知道它已经从其初始旋转q(在欧拉角:0,0,0)中旋转,只在任意轴上以任意数量的15度旋转。例如,在X轴上旋转4 * 15度,在Y轴上旋转7 * 15度,在Z轴上旋转13 * 15度。我怎么能发现这个?

我试图从物体的旋转矩阵中取出欧拉角,但是只有当我只在一个轴上旋转时它似乎才能正确检测到这种情况。如果我开始将X,Y和Z轴混合15度旋转,则欧拉角会变得混乱。

我100%确定对象仅以15度块旋转。

4 个答案:

答案 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)

旋转不是可交换的,因此如果您不知道正确的顺序,则用欧拉角描述它们是有问题的。如果您知道顺序,则可以设置一个方程式系统,其一侧乘以三个旋转矩阵(由旋转角度参数化),另一侧乘以最终旋转矩阵。给你三个方程和三个未知数。但要注意欧拉角表示中的奇点!