Matrix 如何从三维对象的变换矩阵获取旋转角度

Matrix 如何从三维对象的变换矩阵获取旋转角度,matrix,3d,transform,angle,euler-angles,Matrix,3d,Transform,Angle,Euler Angles,我有一个3d对象,可以沿x、y和z轴自由旋转,然后保存为变换矩阵。在旋转顺序未知且对象旋转超过3次的情况下(例如:-如果我将对象旋转x-60度、y-30度、z-45度,然后再旋转x->30度),是否可以从变换矩阵中提取旋转的角度?我知道,如果旋转顺序已知,则可以获得角度,但是,如果我只有最终的变换矩阵,而没有其他东西,有可能从变换矩阵得到旋转的角度(x、y和z)吗?Euler角度转换是一个非常有名的话题。只需规范化矩阵方向向量,然后使用类似的方法 矩阵是事物的当前状态,它不知道过去的转换是什么。

我有一个3d对象,可以沿x、y和z轴自由旋转,然后保存为变换矩阵。在旋转顺序未知且对象旋转超过3次的情况下(例如:-如果我将对象旋转x-60度、y-30度、z-45度,然后再旋转x->30度),是否可以从变换矩阵中提取旋转的角度?我知道,如果旋转顺序已知,则可以获得角度,但是,如果我只有最终的变换矩阵,而没有其他东西,有可能从变换矩阵得到旋转的角度(x、y和z)吗?

Euler角度转换是一个非常有名的话题。只需规范化矩阵方向向量,然后使用类似的方法

矩阵是事物的当前状态,它不知道过去的转换是什么。它不知道矩阵是如何建立的。您只需将矩阵分解为您喜欢的任何部分,只要:

  • 数据不重叠。例如:两个X轴旋转后彼此之间无法区分(无法知道它的12个或三个不同旋转是否相加)
  • 序列顺序是已知的
  • 可以从数据中构建分解(例如,可以测量尺度)

  • 是的,这是可能的。您可以在找到帮助,但它没有显示如何获得角度。我需要全部三个角度你说它可以按任何顺序旋转是什么意思?通常改变旋转顺序会改变结果。。。你需要它是xyz表示法还是角度和方向?你已经在使用矩阵数学的特定库了吗?例如,OpenCV已经有一个功能可以为您执行此操作。我所说的顺序是指,例如,如果用户将3D对象沿x轴旋转45度,然后沿y轴旋转45度,最后沿z轴旋转60度,在这种情况下,顺序是已知的,即x->y->z。可以从上述矩阵的变换矩阵中检索角度。但我的情况不同,旋转的顺序不是“先验的”,而是用户希望旋转的方向。对于不同的阶数,输出矩阵变化(最终变换矩阵)。我的问题是,在这种情况下,是否可以检索从矩阵旋转的角度请注意:x->y->x->z->y是不可检索的。在这种情况下,旋转顺序应该是已知的,不是吗?。我的情况不同,旋转的顺序不知道,我的意思是它不在我手中。用户可以按自己需要的顺序旋转3D对象,我只带了最终的变换矩阵,其他什么都没有。而且在我的例子中,步骤不限于3(如x->y->z),但可以是x->y->z->y->z->…从矩阵中检索序列是不可能的。矩阵不知道这一点。任何超过3个步骤的内容都很可能在矩阵中丢失,除非您碰巧知道其中的一些阶段。但是,如果这不是你知道的第一条链和序列,那么你就无能为力,数据就会永远丢失。矩阵不知道对象的历史,只知道其当前状态。所有分解都是表示当前状态的同样有效的方法,但不是它是如何到达那里的。谢谢。。我将分别保存角度