使用四元数旋转3D欧拉点以避免万向架锁定

|| 首先,我已经进行了大量的谷歌搜索,并检查了有关此问题的其他stackoverflow帖子,但是无法获得有效的答复或工作代码段。数学不是我的强项。 我需要一个例程,该例程需要一个摄影点(CX,CY,CZ),并将其绕着视点(LX,LY,LZ)旋转三个旋转角度(RX,RY,RZ)。在某些情况下,使用欧拉旋转会导致云台锁定,这是我需要避免的。所以我听说使用四元数。 我发现这可以将旋转转换为四元数 http://www.euclideanspace.com/maths/geometry/rotations/conversions/eulerToQuaternion/index.htm 并将其从四元数转换回欧拉XYZ旋转 http://www.euclideanspace.com/maths/geometry/rotations/conversions/quaternionToEuler/index.htm 它们似乎工作正常,但是我需要知道如何使用四元数围绕LX,LY,LZ旋转CX,CY,CZ,然后返回新的CX,CY,CZ,而不会出现万向节锁定问题。 关于这一点的内容太多了,以至于我相信良好的解释和代码段不仅会对我有帮助,而且将来对其他人也有帮助。 因此,如果可以的话,请提供帮助。非常感谢。     
已邀请:
        简短的答案,如果您的四元数是Q并且新的摄影点是C \':
C\' = Q*(C-L)*Q^-1 + L
其中点以Cw = 0增高,并且乘法和逆均根据四元数规则。 具体来说,让D = C-L。然后让F = Q * D:
Fw = Qw*0  - Qx*Dx - Qy*Dy - Qz*Dz
Fx = Qw*Dx + Qx*0  + Qy*Dz - Qz*Dy
Fy = Qw*Dy - Qx*Dz + Qy*0  + Qz*Dx
Fz = Qw*Dz + Qx*Dy - Qy*Dx + Qz*0
最后,我们得到C \'= F * Q ^ -1 + L:
Cw\' = 0
Cx\' = Fw*Qx - Fx*Qw + Fy*Qz - Fz*Qy + Lx
Cy\' = Fw*Qy - Fx*Qz - Fy*Qw + Fz*Qx + Ly
Cz\' = Fw*Qz + Fx*Qy - Fy*Qx - Fz*Qw + Lz
但是,请注意,如果您是根据Euler表示创建四元数,则最终仍将使用万向节锁定。云台锁定是欧拉表示的一个属性,四元数将只表示相同的变换。要摆脱万向节锁定,除非我误解了您的使用方式,否则您将需要完全避免使用Euler表示。     

要回复问题请先登录注册