如何知道物体在3D中只旋转了15度

How to know that object has been rotated only in 15 degree chunks in 3D?

本文关键字:旋转 15度 3D 何知道      更新时间:2023-10-16

我在三维空间中有一个以某个方向定向的三维对象。我怎么知道它从初始旋转q(以欧拉角为单位:0,0,0(开始,只在任意轴上旋转了任意数量的15度。例如,在X轴旋转4*15度,在Y轴旋转7*15度和在Z轴旋转13*15度。我如何检测到这一点?

我试着从物体的旋转矩阵中获取欧拉角,但似乎只有当我只在一个轴上旋转时,它才能正确地检测到情况。如果我开始混合X、Y和Z轴15度的旋转,欧拉角就会变得一团糟。

我100%确信这个物体只旋转了15度。

我相信,旋转矩阵只能分解为四元数,而不能分解为每轴旋转。

我不确定您使用的是什么数学库,但如果提供,您可以使用四元数,这将非常直接地实现您想要的功能。之后可以将它们转换为旋转矩阵。

旋转是不可交换的,因此如果不知道正确的顺序,用欧拉角描述它们是有问题的。如果你知道阶数,你可以建立一个方程组,一边是三个旋转矩阵(由旋转角度参数化(的乘积,另一边是最后的旋转矩阵。给你三个方程式和三个未知数。但是要注意欧拉角表示中的奇点!

如果可以的话,最简单的方法就是存储组件(float3 m_Translation, m_Rotation, m_Scale(和一个矩阵,只要它们发生变化就会更新(float4x4 m_Matrix(。要获取数据,只需获取该部分的向量并返回即可。内存使用量很小(12-16个浮点(,计算开销也很小(在更新部分时重新计算矩阵(。

然而,如果不能做到这一点,谷歌建议你可以通过一些类似的工作来分解旋转矩阵。这确实需要大量的数学运算。

如该页所述,D3DX库还有一个分解矩阵的函数:D3DXMatrixDecompose