四元数与轴+角度

Posted

技术标签:

【中文标题】四元数与轴+角度【英文标题】:Quaternions vs Axis + angle 【发布时间】:2012-03-14 02:32:42 【问题描述】:

我一直试图找出两者之间的区别,但没有运气减去这个

两者的主要区别 这两种表示是四元数的旋转轴被缩放 通过旋转半角的正弦,而不是将角度存储在 向量的第四个分量,我们存储半角的余弦。

我不知道是什么

半旋转角的正弦

半角的余弦

是什么意思?

【问题讨论】:

可能属于Mathematics SE。 【参考方案1】:

Quaternios 和 Axis-angle 都是 3D 旋转/方向的 4D 表示,各有利弊。

axis-angle:表示旋转角度a和旋转轴n。例如,绕 Y 轴旋转 180 度将表示为 a = 180, n= 0,1,0。表示非常直观,但要实际应用旋转,则需要另一种表示,例如四元数或旋转矩阵。

四元数:表示一个 4D 向量的旋转。需要更多的数学运算并且不太直观,但它是一种更强大的表示。四元数很容易插值(混合),并且很容易将它们应用于 3D 点。这些公式很容易在网上找到。给定 a 弧度围绕归一化轴 n 的旋转,四元数 4D 向量将为 cos a/2, (sin a/2) n_x, (sin a/2) n_y, (sin a/2) n_z。这就是半角的正弦和余弦的来源。

【讨论】:

出于好奇,有没有使用更少数学但可能使用更多数字的强大表示?例如,我假设您可以堆积 Axis-Angle 表示来模仿欧几里得。 @Aaron Franke 我有时使用向量表示,其中向量的方向是旋转轴,向量的范数是旋转。我相信这有时被称为Exponential MapQuaternion Log。如果其中两个靠近在一起,您实际上可以在它们之间进行欧几里得插值。【参考方案2】:

这意味着,例如,如果您想绕 Z 轴 (0,0,1) 旋转 180 度,那么四元数的实部将是 cos(180deg/2)=0,而它的虚部将是 sin(180deg/2)*(0,0,1)=(0,0,1) .那是q=0+0i+0j+1k。 90 度旋转会给你q=cos(90deg/2)+sin(90deg/2)*(0i+0j+1k)=sqrt(2)/2+0i+0j+sqrt(2)/2*k,等等。

OTOH,如果您要问什么是正弦和余弦,请检查您的语言是否提供 sin()cos() 函数(尽管它们的参数可能以弧度为单位),然后查看 http://en.wikipedia.org/wiki/Sine。

【讨论】:

以上是关于四元数与轴+角度的主要内容,如果未能解决你的问题,请参考以下文章

欧拉角与四元数(计算,编程)

如何理解glm中四元数与向量相乘函数的写法

3D图形:矩阵、欧拉角、四元数与方位的故事

unity-----------------------四元数与欧拉旋转方法

四元数与旋转变换

陀螺仪和加速度计的读数和四元数怎么建立关系