我有一个Y轴为UP的坐标系。我需要将它转换为Z为UP的坐标系。我将旋转存储在四元数中,所以我的问题是:如果我有一个四元数X,Y,Z我可以用Z切换Y并得到Z实际上是UP的结果吗?
答案 0 :(得分:9)
只需在四元数中打开两个轴?不,这不起作用,因为这会颠覆手性。然而,如果你翻转手性并否定四元数的真实部分,那么你就会恢复原始的手性。一般来说,您可以将其写为
Q'(Q,i'j'k')=ε i'j'k' Q w _w + Q i _i + Q j _j + Q k _k
其中
是完全反对称的张量,称为Levi-Cevita符号。
这不应该是一个惊喜,因为四元数的i²,j²,k²规则也由相同的完全反对称张量定义。
答案 1 :(得分:3)
我正在调整this post的答案,因为这里的答案较旧且可能更通用。
最好在将角度和轴转换为四元数的上下文中考虑这一点。在Wikipedia中,您可以读到使用
描述围绕具有单位方向矢量(x,y,z)的轴的角度θ的旋转q = cos(θ/ 2)+ sin(θ/ 2)(xi + yj + zk)
你的帖子只告诉我们Y↦Z,即旧的Y方向是新的Z方向。其他方向呢?你可能想要保留X↦X,但这仍然有两个选择。
首先考虑第一个案例。更改坐标系对角度和轴的影响是什么?嗯,轴坐标经历与点相同的坐标交换,角度改变其符号。你有
cos(-θ/ 2)+ sin(-θ/ 2)(xi + zj + yk)
与上面相比,实部不会改变(因为cos( x )= cos( - x ))但是虚部改变了它们的符号,除了改变顺序。由此推广,描述旧坐标系中旋转的四元数a + bi + cj + dk
将在新坐标系中变为a − bi − dj − ck
。或者进入−a + bi + dj + ck
,这是对同一旋转的不同描述(因为它将θ改变360°但θ/ 2改变180°)。
与此相比,Z↦-Y的第二种情况保持θ的符号,因此您只需调整轴。新的 Z 坐标是旧的 Y 坐标,新的 Y 坐标是否定的旧 Z 坐标。因此a + bi + cj + dk
会转换为a + bi − dj + ck
(或其否定)。请注意,这只是四元数乘以i
或−i
,具体取决于您将其乘以哪一边。如果你想把它写成一个共轭,你有θ=±45°所以你得到了表示坐标系变化的四元数的平方根。
答案 2 :(得分:2)
尝试: 四元数旋转=新四元数(X,Z,Y,-W); //由于
,我不得不交换Z和Y.答案 3 :(得分:1)
不,你不能交换y和z - 它会变成左手坐标系,如果它是右手(反之亦然)。
但是,您可以进行以下替换:
newX = oldZ
newY = oldX
newZ = oldY
我怀疑你真正想要的是围绕x轴的简单旋转。如果这就是你想要切换y和z的原因,那么你应该对+ x轴应用-90度的旋转(假设你有一个右手坐标系)。