相关疑难解决方法(0)

是否有将四元数旋转转换为欧拉角旋转的算法?

是否存在将旋转的四元数表示转换为欧拉角表示的现有算法?欧拉表示的旋转顺序是已知的,并且可以是六个排列中的任何一个(即xyz,xzy,yxz,yzx,zxy,zyx).我已经看到了固定旋转顺序的算法(通常是NASA标题,银行,滚动惯例),但不是任意旋转顺序.

此外,因为存在单个方向的多个欧拉角表示,所以该结果将是模糊的.这是可以接受的(因为方向仍然有效,它可能不是用户期望看到的方向),但是如果存在一个采用旋转限制的算法(即自由度数和考虑到每个自由度的限制,并在给定这些约束条件下产生"最明智的"欧拉表示.

我有一种感觉,这个问题(或类似的东西)可能存在于IK或刚体动力学领域.


解决:我刚刚意识到我可能不清楚我是通过遵循图形宝石的Ken Shoemake的算法来解决这个问题的.当时我确实回答了我自己的问题,但是我发现它可能并不清楚我这样做了.有关详细信息,请参阅下面的答案.


只是为了澄清 - 我知道如何从四元数转换为所谓的' Tait-Bryan '表示 - 我称之为'NASA'约定.这是zxy的旋转顺序(假设'Z'轴向上)的惯例.我需要一个适用于所有轮换订单的算法.

那么,解决方案可能是采用zxy顺序转换,并从其中获得其他五个转换以获得其他旋转顺序.我想我希望有一个更"全面"的解决方案.无论如何,我很惊讶我找不到现有的解决方案.

另外,这也许应该是一个单独的问题,任何转换(假设已知的旋转顺序,当然)将选择一个欧拉表示,但实际上有很多.例如,给定yxz的旋转顺序,两个表示(0,0,180)和(180,180,0)是等价的(并且将产生相同的四元数).有没有办法用限制自由度来约束解决方案?就像你在IK和僵硬的身体动力学中做的那样?即,在上述示例中,如果关于Z轴仅存在一个自由度,则可以忽略第二表示.


我已经找到了一篇可能是这个pdf算法的论文,但我必须承认,我发现逻辑和数学有点难以理解.当然还有其他解决方案吗?任意轮换顺序真的如此罕见吗?当然,每个允许骨架动画和四元数插值(即Maya,Max,Blender等)的主要3D包必须解决这个问题吗?

language-agnostic math animation quaternions euler-angles

27
推荐指数
4
解决办法
2万
查看次数