使用四元数,以避免万向节锁定旋转3D欧拉点(Rotate 3D Euler point using

2019-10-29 06:49发布

首先,我做了很多谷歌搜索和检查这个计算器的其他职位,但不能得到一个工作答复或工作代码的一个片段。 数学是不是我的强项。

我需要有一个例程,需要一个照相机点(CX,CY,CZ)并旋转约LOOKAT点(LX,LY,LZ)由三个旋转角(RX,RY,RZ)。 使用Euler旋转导致在某些情况下,我需要避免万向锁。 所以,我听说过使用四元数。

我发现这的旋转转换为四元数http://www.euclideanspace.com/maths/geometry/rotations/conversions/eulerToQuaternion/index.htm

这从四元数转换回欧拉XYZ旋转http://www.euclideanspace.com/maths/geometry/rotations/conversions/quaternionToEuler/index.htm

他们似乎很好地工作,但我需要知道如何使用四元数旋转CX,CY,CZ各地LX,LY,LZ再没有万向锁的问题返回新CX,CY,CZ。

有如此多的在那里关于这个,我肯定的代码一个很好的解释和片段将不仅有助于我,但许多人的未来。

所以,请如果你能帮助。 非常感谢。

Answer 1:

答案很简单,如果你的四元数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

但是,请注意,如果您正在从欧拉表示四元数,你还是会最终获得万向节锁定。 万向节锁是欧拉表示与四元数将只表示相同转型的属性。 为了摆脱支架自锁的,你需要避免欧拉表示完全,除非我误解你是如何使用它。



文章来源: Rotate 3D Euler point using Quaternions to avoid gimbal lock