关于旋转(Rotation)

很多萌新在接触计算机图形学的时候,不明白为啥要用四元数来表示旋转角度,那这篇文章主要从比较各大旋转角度,在比较中突出四元数的优点和实用。

在计算机图形学中,一个物体的位置很容易确定,直接拿到position就可以准确地定位物品的位置,但是其方向(orientation)是一个值得探讨的话题。那么通过旋转角度来可以定义两两orientation之间的改变。“朝向”是状态,“旋转”是操作。

关于旋转这个话题,接下来分成三个步骤,由浅入深地来讨论:

1,旋转矩阵

假设当前的朝向方向是 (x, y, z)    那么旋转可以由旋转矩阵得到:

沿着X轴旋转:

沿着y轴旋转:

沿着z轴旋转:

先沿着X轴转动然后在沿着Y轴转动,很可能就会导致一个问题万向节死锁问题(Gimbal Lock)

  补充: 出现Gimbal Lock的本质原因在于:当第二次旋转角度为90度时,第三个轴和第一个轴转到了同个方向,因此缺少了一个自由度,导致了运动空间的限制。

取代上面方案的是沿着任意轴进行旋转特定的角度

但这种方法也是不能完全解决万向节死锁问题

2,欧拉角

针对上面的旋转问题,旋转数据量大,且存在问题,那使用欧拉角 可以使用vec3来存储一个欧拉角

Vec3 EulerAngles(RotationX, RotationY, RotationZ);

欧拉角可以分为三个部分,俯仰角:围绕x轴的pitch,偏航角:围绕y轴的yaw,滚转角:围绕z轴的roll,

使用欧拉角可以表示任何种类的旋转角度。但是仍存在着一个欧拉角的问题:

对两个朝向进行插值比较难,简单对x,y,z简单插值得到结果不理想;

实施多次旋转很复杂且不准确,必须计算出最终的旋转矩阵,然后据此推测欧拉角

不同角度可产生同样的旋转;

针对有些操作会很复杂;如绕指定的轴旋转N角度。

3,四元数,表示旋转的好工具。

四元数是由4个数[x, y, z, w]构成,表示了如下的旋转

x = RotationAxis.x * sin(RotationAngle / 2)

y = RotationAxis.y * sin(RotationAngle / 2)

z = RotationAxis.z * sin(RotationAngle / 2)

w = cos(RotationAngle / 2)

其中 RotationAxis 旋转轴,RotationAngle 旋转的角度。

这样四元数中实际上存储了一个旋转轴和一个旋转角度。其中xyz分别代表了各个轴上的旋转分量。

其中[0, 0, 0, 1]表示单位四元数 (unit quaternion),表示没有旋转。

3. (1)如何从两个方向向量得到旋转角度:

      r = v1 X v2 是旋转轴

      O = acos(v1 * v2)  是旋转角度

    然后带入上面的公式即可。

3.(2)如果先转动了q1,再转动了q2, 那么结果转动了q’ = q2 * q1。

3.(3)

四元数(quaternion)的好处是:使用角度和坐标轴的表示方法来防止了Gimbal lock的出现;避免了旋转矩阵的运算量和数据量;可以很容易的插值操作

转载于:https://www.cnblogs.com/zhang-yd/p/10463319.html

关于旋转(Rotation)相关推荐

  1. 矩阵中的旋转(Rotation)

    参考的是<游戏和图形学的3D数学入门教程>,算是读书笔记吧. 1.2D中的旋转 如果你要计算一个向量逆时针旋转一定的度数后得到的向量,很多书都只会给一个公式.类似下面的包含sin,cos的 ...

  2. 【SeeMusic】视频编辑 ( 视频 X 坐标 | 视频 Y 坐标 | 视频旋转 | 视频扭曲 )

    SeeMusic 系列文章目录 [SeeMusic]下载安装并注册 SeeMusic 软件 [SeeMusic]创建 SeeMusic 工程并编辑相关内容 ( 创建工程 | 导入 MIDI 文件 | ...

  3. 一文搞懂RSOP偏振态旋转

    偏振态(State of Polarization, SOP)和偏振态旋转(Rotation of State of Polarization, RSOP)是两个完全不一样的东西. SOP是描述偏振态 ...

  4. Unity摄像机对象锁定旋转运镜模拟

    问题简述 在3D模式下如何模拟实现Unity摄像机对象锁定旋转运镜,可以分为两个部分,第一是实现对象锁定,第二是实现旋转运镜.对象锁定就是无论摄像机如何运动,始终保持对象位于摄像机成像区域的固定位置, ...

  5. matlab坐标值旋转平移

    matlab坐标值旋转平移 简单记录一下坐标值旋转 rotation. Coordinate_value_rotation function [xout,yout] = Coordinate_valu ...

  6. 【数字图像处理】实验一 图像的平移,缩放和旋转(vs2017+opencv)

    文章目录 一. 平移 1.思路 2.实现代码 二.缩放 1.思路 2.代码实现 三.旋转变换 1.思路 对文章内容如有异议欢迎在评论区提问 代码包: 数字图像平移.旋转.缩放 一. 平移 1.思路 新 ...

  7. OpenGL中关于矩阵缩放、平移、旋转的讲解

    1.矩阵缩放 对一个向量进行缩放(Scaling)就是对向量的长度进行缩放,而保持它的方向不变.由于我们进行的是2维或3维操作,我们可以分别定义一个有2或3个缩放变量的向量,每个变量缩放一个轴(x.y ...

  8. [Unity学习笔记:FPS游戏制作(1)]角色的移动,旋转与推进上升————(2021.6.13学习笔记)

    文章目录 一,什么是FPS游戏 二,功能实现思路与过程 (1)新建角色 (2)实现移动功能的思路 (3)实现旋转功能的思路 (4)实现推进上升功能的思路 (5)具体代码 (5)脚本的使用方法 (6)最 ...

  9. 坐标变换(平移、旋转与缩放)

    本文主要参考Coordinate Systems and Transformations(坐标系及其变换). 主要内容 坐标系与广义坐标系 坐标变换 仿射变换 旋转.平移.伸缩与剪切 绕任意轴旋转 注 ...

  10. 图像处理之图像变换(放缩、平移、旋转、仿射变换、透视变换)

    目录 1.放大缩小图像(Scaling) 2.平移图像(translation) 3.旋转图像(rotation) 4.仿射变换(Affine Transformation) 5.透视变换 (Pers ...

最新文章

  1. mysql表分区占用存储_MySQL 分区分表应用场景分析和分区中可能遇到的坑点
  2. api ajax解析json数据库,api ajax解析json数据库
  3. mysql服务重启后不见了_一次诡异的Mysql服务不断重启故障排查
  4. 每日一博 - tcpdump小技巧
  5. 源码varnish安装
  6. 技术干货 | mPaaS 框架下如何使用 Crash SDK 对闪退进行分析?
  7. 【clickhouse】docker 下 搭建 clickhouse 监控
  8. 阿姆达尔定律(Amdahl's law)
  9. Lucene 中文分词器 Ik-Analyzer 使用教程
  10. caffe训练的实时可视化思路
  11. 计算机论文期中小结,毕业论文中期小结
  12. 数据准确性和模型准确性
  13. cassandra java cql_Cassandra CQL v3.3中文文档(上)
  14. Solidworks如何生成爆炸图
  15. Photoshop(4)做海报的心得
  16. ES插件在谷歌浏览器的安装
  17. nvidia显卡控制面板的安装位置
  18. 实用Maven插件 - 打包
  19. 爬虫实战:12306登录
  20. “框架效应”--如何说话让人喜欢?

热门文章

  1. 星星之火-38:20M的LTE带宽,为什么是1200个子载波?
  2. Eclipse+Maven配置TestNG框架
  3. 网通相中中国联通GSM网络 联通暂无意租售
  4. Rikka with Travels【换根树dp】
  5. 去除Opera与迅雷的关联
  6. Pyhton之异常处理
  7. exfat文件系统分析
  8. BioPython(一)
  9. Composer 原理使用
  10. C语言:n个数的阶乘之和