矩阵、欧拉角、轴-角对、四元数随笔
来源:互联网 发布:仙桃数据谷 编辑:程序博客网 时间:2024/05/22 06:42
一、矩阵
在 3D 游戏中,可以使用矩阵来表示一个物体的旋转。
1) 优点:
个人认为,理解起来最为直观。
像现成的DXSDK库中也提供了十分完善的相关接口
一个矩阵即可表示多种变换的组合
2) 缺点:
每次计算都会产生误差,因此,需要经常规范化。
耗的内存较多些。
二、欧拉角
欧拉角指的是:以世界坐标系为参考坐标系(一定记住是世界坐标系),使用x,y,z三个值来分别表示绕(世界的)x轴、y轴、z轴旋转的角度量值。其取值是在[0, 360]间。一般用roll, pitch, yaw来表示这些分量的旋转值。因为是以世界坐标系为参考坐标系,因此每一次的旋转都不会影响到后续的旋转转轴。即:它无法表示任意轴的旋转。
1) 优点:
理解起来很直观。
2) 缺点:
会有万向锁问题。
三、轴-角对
其实轴-角对与欧拉角(个人认为)是有一定的关系的。因为欧拉角说的是分别(注意:是分别)绕(以世界坐标系为参考坐标系的)三个轴旋转一定的角度。其实这三次的旋转可以最终转换到一次变换。即:最终可表示为:绕某一旋转轴旋转一定角度的变换。(意思就是说:那三次变换我们最终可以计算出旋转轴以及绕该旋转轴旋转的角度量)。
1) 缺点:
轴-角对表示法:插值不平滑,可能会有跳跃。(文档上说,欧拉角同样存在这个问题)
2) 优点:
可解决欧拉角的万向锁问题。
四、四元数
四元数定义:q = w + xi + yj + zk
注意:
1) 四元数可以归一化,并且只有归一化的四元数才用来描述旋转
2) 四元数与轴-角对很像。因为四元数描述的也是一个旋转轴与一个绕着该旋转轴旋转的量值(即:角度或弧度)。但四元数与轴-角对不等价。它们的关系如下:
假如:轴-角对的值如下:
轴为:n
角为:theta
则,对应的四元数中的w、x、y、z的值分别为:
w = cos(theta / 2)
x = nx * sin(theta / 2) // nx 是轴 n 的 x 分量
y = ny * sin(theta / 2) // ny 是轴 n 的 y 分量
z = nz * sin(theta / 2) // nz 是轴 n 的 z 分量
3) 四元数的乘法意义:
Q = Q1 * Q2表示的是:Q先做Q2的旋转,再做Q1的旋转的结果,而且多个四元数的旋转也是要以合并的。
4) 四元数做一次乘法需要16次乘法和加法,而3x3矩阵需要27次。所以有多次旋转操作时,使用四元数计算效率更高些。
5) 四元数的插值过度平滑。最常用的是线性插值。
- 矩阵、欧拉角、轴-角对、四元数随笔
- iPP矩阵操作随笔3-矩阵加法
- iPP矩阵操作随笔1
- iPP矩阵操作随笔2-向量加法
- iPP矩阵操作随笔4-矩阵乘向量
- 旋转矩阵、欧拉角、四元数、轴/角之间的转换
- 旋转矩阵、欧拉角、四元数、轴/角之间的转换
- 旋转矩阵,欧拉角,四元数,旋转向量(轴-角)
- 对角化矩阵
- 对矩阵求导
- 矩阵对向量求导
- 对矩阵的打印
- 矩阵对角化1
- 矩阵的对角化
- Toeplitz 矩阵对角化
- 标量对矩阵求导
- 矩阵对角化
- 矩阵对角化
- 用Gradle、Jetty运行Remote Debug
- C++ 7.8.2 函数匹配与实参转换
- memcached介绍和基本命令
- Verilog有符号数运算
- 判断其实时间小于结束时间
- 矩阵、欧拉角、轴-角对、四元数随笔
- Excel中VLOOKUP结果中换行无法显示(亲自实践)
- MongoDB 常用故障排查工具
- 设置虚拟机系统和nginx自启动
- 安卓 No CPU/ABI system image available for this target 错误解决办法
- visual studio附加选项/Tc、/Tp、/TC、/TP(指定源文件类型)
- 题目1513:二进制中1的个数
- 一个程序员对学弟学妹的建议
- ReactiveCocoa框架菜鸟入门(三)——信号(Signal)与订阅者(Subscriber)