四元数算法

合集下载

四元数

四元数
此处仅讨论具有实数元素之四元数,并将以两种形式来描述四元数。其中一种是向量与纯量的结合,另一形 式两个创建量(constructor)与双向量(bivector;i、j与k)的结合。
定义两个四元数:
其中表示矢量 ;而表示矢量。
跟复数、向量和矩阵一样,两个四元数之和需要将不同的元素加起来。 加法遵循实数和复数的所有交换律和结合律。
威廉·卢云·哈密顿
明确地说,四元数是复数的不可交换延伸。如把四元数的集合考虑成多维实数空间的话,四元数就代表着一 个四维空间,相对于复数为二维空间。
四元数是除环(除法环)的一个例子。除了没有乘法的交换律外,除法环与域是相类的。特别地,乘法的结 合律仍旧存在、非零元素仍有逆元素。
四元数形成一个在实数上的四维结合代数(事实上是除法代数),并包括复数,但不与复数组成结合代数。 四元数(以及实数和复数)都只是有限维的实数结合除法代数。
不只如此,哈密顿还创造了向量的内外积。他亦把四元数描绘成一个有序的四重实数:一个纯量和向量的组 合。若两个纯量部为零的四元数相乘,所得的纯量部便是原来的两个向量部的纯量积的负值,而向量部则为向量 积的值,但它们的重要性仍有待发掘。
哈密顿之后继续推广四元数,并出了几本书。最后一本《四元数的原理》(Elements of Quaternions)于 他死后不久出版,长达八百多页。
非奇异表达(和例如欧拉角之类的表示相比)
比矩阵更紧凑(更快速)
单位四元数的对可以表示四维空间中的一个转动。
所有单位四元数的集合组成一个三维球和在乘法下的一个群(一个李群)。是行列式为1的实正交3×3正交 矩阵的群的双面覆盖,因为每两个单位四元数通过上述关系对应于一个转动。群和同构,是行列式为1的复酉 2×2矩阵的群。令为形为的四元数的集合,其中或者都是整数或者都是分子为奇数分母为2的有理数。集合是一 个环,并且是一个格。该环中存在 24个四元数,而它们是施莱夫利符号为的正二十四胞体的顶点。

四元数表示姿态和旋转

四元数表示姿态和旋转

四元数表示姿态和旋转1. 引言1.1 介绍四元数四元数是一种数学概念,最早由爱尔兰数学家威廉·哈密顿在19世纪提出。

四元数可以看作是复数的扩展,它包括了实部和三个虚部,通常用符号q = w + xi + yj + zk来表示,其中w、x、y、z分别是实部和三个虚部的系数。

四元数在姿态和旋转中有着广泛的应用,在计算机图形学、机器人学、物理模拟等领域都有着重要作用。

在旋转表示中,四元数可以更加高效地描述物体在三维空间中的旋转,避免了欧拉角表示中的万向锁问题,同时还可以实现平滑的插值和融合操作。

尽管四元数在数学上可能较为复杂,但其在姿态和旋转中的应用已经得到了广泛认可。

通过四元数,我们可以更加简洁地表达旋转操作,提高了计算效率和精度,为解决实际问题提供了强大的工具。

四元数的引入,不仅拓展了我们的数学工具箱,也为许多领域的发展带来了新的可能性。

1.2 四元数在姿态和旋转中的应用四元数在姿态和旋转中的应用非常广泛,它在航空航天、机器人、计算机图形学等领域都有重要的作用。

在航空航天领域,四元数被广泛应用于飞行器的姿态控制和导航系统中。

通过四元数表示飞行器的旋转姿态,可以更准确地描述飞行器的运动状态,实现精确的控制和导航。

在机器人领域,四元数也被用于机器人的运动规划和控制。

通过四元数表示机器人的姿态变化,可以更有效地规划机器人的运动轨迹,确保机器人在复杂环境中稳定地移动。

在计算机图形学领域,四元数被用于实现3D图形的旋转和变换。

通过四元数表示物体的旋转,可以避免旋转变换的奇异性问题,实现更流畅和自然的图形变换效果。

四元数在姿态和旋转中的应用为各个领域提供了一种有效的数学工具,可以更加精确地描述和处理物体的旋转和姿态变化。

它不仅提高了系统的性能和稳定性,也拓展了人类对于旋转和姿态变化的理解和应用。

2. 正文2.1 四元数的定义四元数是一种数学概念,可以用来表示复杂的旋转和姿态。

它由一个实部和三个虚部组成,通常用符号q = q + qq + qq + qq来表示,其中q、q、q、q是实数,q、q、q是虚数单位。

四元数

四元数

为什么使用四元数为了回答这个问题,先来看看一般关于旋转(面向)的描述方法-欧拉描述法。

它使用最简单的x,y,z值来分别表示在x,y,z轴上的旋转角度,其取值为0-360(或者0-2pi),一般使用roll,pitch,yaw来表示这些分量的旋转值。

需要注意的是,这里的旋转是针对世界坐标系说的,这意味着第一次的旋转不会影响第二、三次的转轴,简单的说,三角度系统无法表现任意轴的旋转,只要一开始旋转,物体本身就失去了任意轴的自主性,这也就导致了万向轴锁(Gimbal Lock)的问题。

还有一种是轴角的描述方法(即我一直以为的四元数的表示法),这种方法比欧拉描述要好,它避免了Gimbal Lock,它使用一个3维向量表示转轴和一个角度分量表示绕此转轴的旋转角度,即(x,y,z,angle),一般表示为(x,y,z,w)或者(v,w)。

但这种描述法却不适合插值。

那到底什么是Gimbal Lock呢?正如前面所说,因为欧拉描述中针对x,y,z的旋转描述是世界坐标系下的值,所以当任意一轴旋转90°的时候会导致该轴同其他轴重合,此时旋转被重合的轴可能没有任何效果,这就是Gimbal Lock,这里有个例子演示了Gimbal Lock,点击这里下载。

运行这个例子,使用左右箭头改变yaw 为90°,此时不管是使用上下箭头还是Insert、Page Up键都无法改变Pitch,而都是改变了模型的roll。

那么轴、角的描述方法又有什么问题呢?虽然轴、角的描述解决了Gimbal Lock,但这样的描述方法会导致差值不平滑,差值结果可能跳跃,欧拉描述同样有这样的问题。

什么是四元数四元数一般定义如下:q=w+xi+yj+zk其中w是实数,x,y,z是虚数,其中:i*i=-1j*j=-1k*k=-1也可以表示为:q=[w,v]其中v=(x,y,z)是矢量,w是标量,虽然v是矢量,但不能简单的理解为3D空间的矢量,它是4维空间中的的矢量,也是非常不容易想像的。

四元数算法

四元数算法

四元数与旋转在讨论「四元数」之前,我们来想想对三维直角座标而言,在物体旋转会有何影响,可以扩充三维直角座标系统的旋转为三角度系统(Three-angle system),在Game Programming G ems中有提供这麼一段:Quaternions do not suffer from gimbal lock.With a three-angle(roll,pitch,yaw)system,there are always certain orientations in which there is no simple change to the trhee values to represent a s imple local roation.You often see this rotation having"pitched up"90degree when you are tryin g to specify a local yaw for right.简单的说,三角度系统无法表现任意轴的旋转,只要一开始旋转,物体本身即失去对任意轴的自主性。

四元数(Quaternions)为数学家Hamilton於1843年所创造的,您可能学过的是复数,例如:a+b i这样的数,其中i*i=-1,Hamilton创造了三维的复数,其形式为w+x i+y j+z k,其中i、j、k的关系如下:i2=j2=k2=-1i*j=k=-j*ij*k=i=-k*jk*i=j=-i*k假设有两个四元数:q1=w1+x1i+y1j+z1kq2=w2+x2i+y2j+z2k四元数的加法定义如下:q1+q2=(w1+w2)+(x1+x2)i+(y1+y2)j+(z1+z2)k四元数的乘法定义如下,利用简单的分配律就是了:q1*q2=(w1*w2-x1*x2-y1*y2-z1*z2)+(w1*x2+x1*w2+y1*z2-z1*y2)i+(w1*y2-x1*z2+y1*w2+z1*x2)j+(w1*z2+x1*y2-y1*x2+z1*w2)k由於q=w+x i+y j+z k中可以分为纯量w与向量x i+y j+z k,所以为了方便表示,将q 表示为(S,V),其中S表示纯量w,V表示向量x i+y j+z k,所以四元数乘法又可以表示为:q1*q2=(S1+V1)*(S2+V2)=S1*S2-V1.V2+V1XV2+S1*V2+S2*V1其中V1.V2表示向量内积,V1XV2表示向量外积。

一种基于四元数算法的双转台五轴后置处理实现

一种基于四元数算法的双转台五轴后置处理实现

1 四元 数算 法 的基础
四元 数在计 算机图形领域 中被广泛运用于 向量旋 转的计算 。四元 数是 指包含 1 个实部 和 3个虚 部 的 复数 ,其形式 为 W+ f + + 。 复数 f 、 J 、k组成 了 四元 数 的基 向量 ,它们有 如 下关 系 :f = × k , J= k×f ,k=f × ,恰好 符合右 手 坐标 系 3个基 向量 的性质 ,这个性质使得 四元数 可 以 关 联到 3 D空间 。 为了让 向量 l , ( ,Y , Z 。 )绕另一 向量 ( , Y : , : )逆 时针转过 角度 0 ,需 要构 造 一个 实 部 为 0 的四元数 P= 0+ f + Y J + Z 1 k ,包含 了待旋转 向量 ' , 的信息 。
A Ne w Me t h o d f o r t h e T wo - t u r n t a b l e 5 - a x i s P o s t p r o c e s s o r B a s e d o n Qu a t e r n i o n Al g o r i t h m
Ab s t r a c t : A n e w me t h o d wa s p r e s e n t e d f o r t h e t w o — t u r n t a b l e 5 - a x i s p o s t p r o c e s s o r .T h e q u a t e r n i o n a l g o r i t h m wa s a d o p t e d t o c o n ・ d u c t t h e c o o r d i n a t e s t r a n s f o r ma t i o n a n d s p a c e a r c i n t e r p o l a t i o n .T h u s ,t h e r o t a t i o n a i r t h me t i c w a s b e c o me mo r e v i s u a l a n d t h e c o d e r e — u s a b i l i t y w a s i mp r o v e d .B y s e t t i n g r e s t ic r t i o n t o t h e A, C a x i s ’i n c r e me n t s a n d s u b d i v i d i n g l o n g l i n e s i n t o mu l t i p l e s e g me n t s , t h e n o n — l i n e a r e r mr w a s r e d u c e d .

四元数概念

四元数概念

四元数概念四元数(Quaternions)是一种数学工具,它是由爱尔兰数学家 William Rowan Hamilton 于1843年发明的。

四元数被广泛应用于计算机图形和动画,机器人控制,摄影测量,化学和物理的研究中。

四元数具有复数的性质并且比复数更为丰富。

复数是由一个实部和一个虚部组成的,而四元数是由一个实部和三个虚部组成的。

四元数的定义如下:Quaternions = {a + bi + cj + dk | a, b, c, d∈R}i²=j²=k²=ijk=-1在四元数中,公式(1)具有一些有趣的特性,这使得四元数成为一种非常有用的工具。

其中一条是四元数具有完整的乘法结构,即使在虚部之间的乘法也是如此。

在计算机图形和动画应用中,四元数极为有用,因为它可以表示多种变换操作(如平移,旋转和缩放)。

q = cos(theta/2) + sin(theta/2)*(vi + vj + vk)这里,cos是余弦函数,sin是正弦函数,theta是旋转角度,v表示旋转轴的单位向量。

p + q = (a1 + a2) + (b1 + b2)i + (c1 + c2)j + (d1 + d2)kkp = ka + kb*i + kc*j + kd*k这些运算遵循基本的加、减和乘法法则,类似于向量的运算。

这些规则具有一些有趣的性质,四元数的乘法不是可交换的,即pq≠qp。

四元数是一种非常有用的数学工具,尤其是在计算机图形和动画,机器人控制,摄影测量,化学和物理的应用中。

它包含了复数所具有的性质,并增加了第三个和第四个虚部,使得它更加丰富和灵活。

四元数还具有证明某些矢量不变性的作用。

对于一个物体的旋转,它的角速度可以通过四元数的导数来表示,这个导数有一个重要的应用,即可以证明质心不受任何外部力矩的影响而保持恒定,这被称为质点定则证明。

四元数还与矩阵有密切的联系。

事实上,四元数乘法可以被转换为矩阵运算,它的实部和虚部也可以被表示为一个4x4的旋转矩阵。

四元数公式

四元数公式

四元数公式四元数的基本数学方程为 : q = cos (a/2) + i(x * sin(a/2)) + j(y * sin(a/2)) +k(z * sin(a/2)) 其中a表示旋转角度,(x,y,z)表示旋转轴下面是如何把具体的四元数与旋转轴和旋转角度对应起来。

1.指出旋转轴和旋转角度,如何转化为四元素。

假定旋转轴是:RAxis = Z轴,换算成三维空间单位向量就是RAxis = [0 0 1],旋转60度那么转化成四元数就是q.w=cos(60°/2) = 0.866q.x=RAix.xsin(60°/2) = 00.5=0q.y=RAix.ysin(60°/2) = 00.5=0q.z=RAix.zsin(60°/2) = 10.5=0.5例子验证:从三维空间中看,假定物体点A=[0 1 0],绕 RAxis = Z轴,旋转30度(假定顺时针为正,因为matlab就是顺时针为正,而下面的quat2dcm函数是matlab自带的)那么物体点A旋转后在世界坐标系下的坐标将是B=[0.866 0.5 0],如何用四元数计算出呢?思路是这样的:任何一个四元数对应着一个旋转3*3矩阵。

M=quat2dcm(q)*A’=[0.866;0.5;0],关于quat2dcm在软件matlab里面有。

从上面可以得到:RAix.x=RAix.y=0由cos(a/2) = 0.866,得到a = 60°或120°由RAix.z*sin(a/2) = 0.5,得到a = 60°或150°因此a = 60°(四元数的旋转角度一般是在0-360之间,之后就是多一圈的问题。

于是可得RAix.z = 1,因此其他q=[0.866,0,0,0.5]意味着旋转轴是RAxis =[0 0 1],旋转角度是60°,其他的类似可以计算。

四元数的特征值分解

四元数的特征值分解

四元数的特征值分解四元数是一种扩展了复数的数学结构,它由一个实部和三个虚部组成。

在实际应用中,四元数常常被用来描述旋转、姿态等物理量。

而特征值分解则是一种重要的矩阵分解方法,它可以将一个矩阵分解为一组特征向量和特征值。

本文将介绍四元数的特征值分解方法。

一、四元数的定义四元数可以表示为$q=q_0+q_1i+q_2j+q_3k$,其中$q_0,q_1,q_2,q_3$为实数,$i,j,k$为虚数,满足$i^2=j^2=k^2=ijk=-1$。

四元数的加法和乘法定义如下:加法:$q_1+q_2=(q_{10}+q_{20})+q_{11}i+q_{12}j+q_{13}k$乘法:$q_1q_2=(q_{10}q_{20}-q_{11}q_{21}-q_{12}q_{22}-q_{13}q_{23})+(q_{10}q_{21}+q_{20}q_{11}+q_{12}q_{23}-q_{13}q_{22})i+...$二、对于一个实数矩阵$A$,它的特征值分解可以表示为$A=Q\Lambda Q^{-1}$,其中$Q$为特征向量矩阵,$\Lambda$为特征值矩阵。

类似地,对于一个四元数矩阵$Q$,它的特征值分解可以表示为$Q=V\LambdaV^{-1}$,其中$V$为特征向量四元数矩阵,$\Lambda$为特征值四元数矩阵。

特征向量四元数矩阵$V$的定义如下:$V=\begin{bmatrix} v_1 & v_2 & v_3 & v_4 \end{bmatrix}$其中$v_1,v_2,v_3,v_4$为四元数向量,满足$Qv_i=\lambda_iv_i$,其中$\lambda_i$为特征值四元数。

特征值四元数矩阵$\Lambda$的定义如下:$\Lambda=\begin{bmatrix} \lambda_1 & 0 & 0 & 0 \\ 0 & \lambda_2 & 0 & 0 \\ 0 & 0 & \lambda_3 & 0 \\ 0 & 0 & 0 & \lambda_4 \end{bmatrix}$其中$\lambda_1,\lambda_2,\lambda_3,\lambda_4$为特征值四元数。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

四元数与旋转
在讨论「四元数」之前,我们来想想对三维直角座标而言,在物体旋转会有何影响,可以扩充三维直角座标系统的旋转为三角度系统(Three-angle system),在Game Programming G ems中有提供这麼一段:
Quaternions do not suffer from gimbal lock. With a three-angle(roll, pitch, yaw) system, there ar
e always certain orientations in which there is no simple change to the trhee values to represent a s imple local roation. You often see this rotation having "pitched up" 90 degree when you are tryin
g to specify a local yaw for right.
简单的说,三角度系统无法表现任意轴的旋转,只要一开始旋转,物体本身即失去对任意轴的自主性。

四元数(Quaternions)为数学家Hamilton於1843年所创造的,您可能学过的是复数,例如:a + b i 这样的数,其中i * i = -1,Hamilton创造了三维的复数,其形式为 w + x i + y j + z k,其中i、j、k的关系如下:
i2 = j2 = k2 = -1
i * j = k = -j * i
j * k = i = -k * j
k * i = j = -i * k
假设有两个四元数:
q1 = w1 + x1 i + y1 j + z1 k
q2 = w2 + x2 i + y2 j + z2 k
四元数的加法定义如下:
q1 + q2 = (w1+w2) + (x1+x2) i + (y1+y2) j + (z1+z2) k
四元数的乘法定义如下,利用简单的分配律就是了:
q1 * q2 =
(w1*w2 - x1*x2 - y1*y2 - z1*z2) +
(w1*x2 + x1*w2 + y1*z2 - z1*y2) i +
(w1*y2 - x1*z2 + y1*w2 + z1*x2) j +
(w1*z2 + x1*y2 - y1*x2 + z1*w2) k
由於q = w + x i + y j + z k中可以分为纯量w与向量x i + y j + z k,所以为了方便表示,将q 表示为(S, V),其中S表示纯量w,V表示向量x i + y j + z k,所以四元数乘法又可以表示为:
q1 * q2 = (S1 + V1)*(S2 + V2) = S1*S2 - V1.V2 + V1XV2 + S1*V2 + S2*V1
其中V1.V2表示向量内积,V1XV2表示向量外积。

定义四元数q = w + x i + y j +z k 的norm为:
N(q) = |q| = x2 + y2 + z2 + w2
满足N(q) = 1的四元数集合,称之为单位四元数(Unit quaternions)。

定义四元数定义四元数q = w + x i + y j +zk的共轭(Conjugate)为:
q* = 定义四元数q = w - x i - y j -z k = [S - V]
定义四元数的倒数为:
1/ q = q* / N(q)
说明了一些数学,您所关心的或许是,四元数与旋转究竟有何关系,假设有一任意旋转轴的向量A(Xa, Ya, Za)与一旋转角度θ,如下图所示:
可以将之转换为四元数:
x = s * Xa
y = s * Xb
z = s * Xc
w = cos(θ/2)
s = sin(θ/2)
所以使用四元数来表示的好处是:我们可以简单的取出旋转轴与旋转角度。

那麼四元数如何表示三维空间的任意轴旋转?假设有一向量P(X, Y, Z)对著一单位四元数q 作旋转,则将P视为无纯量的四元数X i + Y j + Z k,则向量的旋转经导证如下:
Rot(P) = q p q*
四元数具有纯量与向量,为了计算方便,将之以矩阵的方式来表现四元数的乘法,假设将四元数表示如下:
q = [w, x, y, z] = [S, V]
两个四元数相乘q" = q * q'的矩阵表示法如下所示:
若令q = [S, V] = [cosθ,u*sinθ],其中u为单位向量,而令q'= [S', V']为一四元数,则经过导证,可以得出q * q' * q^(-1)会使得q'绕著u轴旋转2θ。

由四元数的矩阵乘法与四元数的旋转,可以导证出上面的旋转公式可以使用以下的矩阵乘法来达成:
讲了这麼多,其实就是要引出上面这个矩阵乘法,也就是说如果您要让向量(x', y', z')(w'为0)对某个单位向量轴u(x, y, z)旋转角度2θ,则w = cosθ,代入以上的矩阵乘法,即可得旋转后的(x", y", z"),如果为了方便,转换矩阵的最下列与最右行会省略不写出来,而如下所示:
关於四元数的其它说明,您可以参考向量外积与四元数这篇文章。

关於旋转的转换矩阵导证,在Game Programming Gems第二章有详细的说明。

关於 Gimbal lock。

相关文档
最新文档