JoshWindsor 发表于 2022-9-21 17:09

四元数的坐标系转换

本篇文章讲解了四元数的坐标系转换,如怎么把来自右手坐标系的四元数转换成Unity3D中左手坐标系的四元数。
注:这里讨论的是Y up的情况(Unity中是Y up),即


可以看到从图左到图右,z轴是取负的
开始推导,首先要知道四元数的定义,比如给出旋转 R_{右} :绕给定轴 u=(u_{1},u_{2},u_{3}) 旋转角度θ
这个旋转用四元数表示,写作 q=\left( cos(θ/2),sin(θ/2)u \right) ,即 q=\left( q_{1},q_{2},q_{3},q_{4}\right)
在左手坐标系,这个旋转就被表示为 R_{左} :绕给定轴 u^{*}=(u_{1},u_{2},-u_{3}) 旋转角度-θ
这个旋转 R_{左} 可以写作: q_左=\left( cos(-θ/2), sin(-θ/2)*u_{1},-sin(-θ/2)*u_{2},sin(-θ/2)*u_{3}\right)
即: q_左=\left( cos(θ/2), -sin(θ/2)*u_{1},sin(θ/2)*u_{2},-sin(θ/2)*u_{3}\right)
则: q_左=\left( q_{1},-q_{2},q_{3},-q_{4}\right)
其他X up和Z up也是类似,推导一下可出结果
需要注意的是,如果右手坐标系是X up或者Z up,那么做完上述过程得到q_{左}之后,还需要做一下到Y up的转换才能得到Unity中的正确四元数结果
页: [1]
查看完整版本: 四元数的坐标系转换