赞
踩
如有类同,纯属抄袭
https://krasjet.github.io/quaternion/quaternion.pdf //四元数书
https://blog.csdn.net/liulong1567/article/details/46420285 //Unity中的四元数解释
https://blog.csdn.net/u010203716/article/details/72837331 //陀螺仪移动图片
https://blog.csdn.net/qq_36834256/article/details/99678862 //欧拉角和四元数详解
陀螺仪:角动量。提供平衡。把旋转的陀螺安装在支架上,无论支架怎么移动,陀螺的旋转轴方向始终不会改变,因此相对更为稳定。
我们都知道向量,向量是用来形容一个二维空间的轨迹与方向,形象化地表示为带箭头的线段。四元数则表示为在一个四维空间的轨迹与方向。
QBA 到 QAC = QBC 类似2维度获取相对的偏移量: 向量AC = 向量AB + 向量BC
欧拉角:如果两个轴重合时,则会失去一个自由度,即万向锁问题。
四元数其实就是定义了一个有三个虚部的复数w+xi+yj+zk;记法[w,(x,y,z)]。
虚数: x轴上的数位实数,则y轴上肯定又一个数与之对应,则这个数就是虚数。真实不存在的数字。
对于i、j、k本身的几何意义可以理解为一种旋转关系,其中i旋转代表 XY平面中X轴正向向Y轴正向的旋转,j旋转代表ZX平面中Z轴正向向X轴正向的旋转,k旋转代表YZ平面中Y轴正向向Z轴正向的旋转,-i、-j、-k分别代表i、j、k旋转的反向旋转。
四元数 xyzw的取值范围是[-1,1],物体并不是旋转一周就所有数值回归初始值,而是两周。
初始值: (0,0,0,1)
沿着y轴旋转:180°(0,1,0,0) 360°(0,0,0,-1)540°(0,-1,0,0) 720°(0,0,0,1)
沿着x轴旋转:180°(-1,0,0,0) 360°(0,0,0,-1)540°(1,0,0,0) 720°(0,0,0,1)
无旋转的写法是Quaternion.identify。
在unity3d中, quaternion 的乘法操作 (operator * ) 有两种操作:
(1) quaternion * quaternion , 例如 q = t * p; 这是将一个点先进行t 操作旋转,然后进行p操作旋转.
(2) Quaternion * Vector3, 例如 p : Vector3, t : Quaternion , q : Quaternion; q = t * p; 这是将点p 进性t 操作旋转;
我进行的是第2种操作,即对一个向量进行旋转;
首先 ,Quaternion 的基本数学方程为 : Q = cos (a/2) + i (x * sin(a/2)) + j (y * sin(a/2)) + k(z * sin(a/2)) (a 为旋转角度)
Q.w = cos (angle / 2)
Q.x = axis.x * sin (angle / 2)
Q.y = axis.y * sin (angle / 2)
Q.z = axis.z * sin (angle / 2)
我们只要有角度就可以给出四元数的四个部分值,例如我想要让点M=Vector3(o,p,q) 绕x轴顺时针旋转90度;那么对应的quaternion数值就应该为:
Q : Quaternion;
Q.x = 1 * sin(90度/2) = sin(45度) = 0.7071
Q.y = 0;
Q.z = 0;
Q.w = cos(90度/2) = cos (45度) = 0.7071
Q = (0.7071, 0 , 0 , 0.7071);
m = Q * m; (将点m 绕 x轴(1,0,0) 顺时针旋转了90度)
四元数的乘法:
QBA = QBA * QAC
四元数的表现形式:负号表示反向旋转。
这是 A 到 B 的四元数表示,由四个元素组成的数组。我主要讲一些实现方法,里面有一些名词的含义,需要大家找其它的资料慢慢参透
我们再来看一个公式,x、y、z轴的偏移量分别为:
公式二
由该公式我们看得出,只要知道一个四元数的值, 我们就能算出 A 到 B 的x、y、z轴的偏移量。
我们从陀螺仪传感器获得的四元数数据,是相对于手机平放在桌面的 xyz 轴的偏移量,我们需要转换成相对上一个位置的偏移量,然后根据偏移量更换相应的图片。
现在我们看一下,怎么获取相对的偏移量:
在平面二维向量中,我们知道向量的运算: 向量AC = 向量AB + 向量BC
公式三
那么在四元数中,我们假设从传感器获取到
第一个 四元数为 ,
假设A点原点,即手机平放在桌面水平位置上。第二个四元数为:,
我们需要得到四元数:
这样才能算出B 到C 的相对 xyz 轴相对位移。通过下面公式可以得到:
公式四
现在知道 和
由下面公式可以得到:
公式五
从A到B的 四元数 转换成 B到A 的四元数公式,只需把第二、第三、第四个元素取负。
知道了和
我们用 公式四 得出 ,然后通过公式二求出 xyz 轴的偏移量。
四元数 x 轴的偏移量 与 欧拉角的俯仰角θ(pitch)类似操作。
四元数 y 轴的偏移量 与 欧拉角的滚转角Φ(row)类似操作。
四元数 z 轴的偏移量 与 欧拉角的偏航角ψ(yaw)类似。
在移动端比较常用到 x、y轴偏移量,就是手机左右摇摆与前后摇摆间的偏移。
手机的坐标系:
当手机左右摇摆时(绕 y轴旋转),得到变化的 (yaw),范围为 (-90 to 90)
当手机前后摇摆时(绕x轴旋转),得到变化的 (pitch),范围为 (-180 to 180)
当手机横屏转换成竖屏或竖屏转换成横屏时(绕 z 轴旋转),即得到变化的 (Row)。
Patch围绕X轴,Yaw围绕Y轴,Roll围绕Z轴
如下图: A点是定点原点。手机刚开始获取的四元数是 QAC,上一次获取的四元数是QAB.现在求QBC, 因为 QBC = QBA * QAC. 中QAC是已知的,而QBA是QAB取反(从A到B的 四元数 转换成 B到A 的四元数公式,只需把第二、第三、第四个元素取负) 。求得的是四维空间中四元数相对的偏移量。
我们都知道向量,向量是用来形容一个二维空间的轨迹与方向,形象化地表示为带箭头的线段。四元数则表示为在一个四维空间的轨迹与方向。
QBA 到 QAC = QBC 类似2维获取相对的偏移量: 向量AC = 向量AB + 向量BC
欧拉角定义为:用来描述刚体在三维欧几里得空间的取向,对于任何参考系,一个刚体的取向,是依照顺序,从这参考系,做三个欧拉角的旋转而设定的。确定定点,转动刚体位置的3个一组独立角参量。
https://blog.csdn.net/andrewfan/article/details/60981437
刚开始的时候,我使用传感器提供的姿态角,也称为欧拉角:pitch yaw roll 来显示。这种 姿态角/欧拉角 比较常用在航空上,无人机技术应该也使用到了这个技术点。我用飞机的模型来展示一下这三个角,就一目了然了(不同作者使用不同的坐标系,使用哪种坐标系,个人而定。):
1、俯仰角θ(pitch):围绕Y轴旋转的。
图二
2、偏航角ψ(yaw):围绕Z轴旋转的角度。
图三
3、滚转角Φ(roll):围绕X轴旋转的角度。
万向锁:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。