3D数学基础及图形开发(四)矩阵的线性变换-旋转

矩阵的线性变换可以分为:旋转,缩放,投影,镜像,切变等。每一种线性变换对应着相应的矩阵。

旋转

  • 2D旋转:a为行向量,M为变换矩阵,b为变换后的向量。
                  aM=b
3D数学基础及图形开发(四)矩阵的线性变换-旋转_第1张图片
Paste_Image.png
3D数学基础及图形开发(四)矩阵的线性变换-旋转_第2张图片
Paste_Image.png

可以看见x轴的单位向量p(1,0)旋转了θ角度以后变成了(cosθ,sinθ),y轴的单位向量q(0,1)旋转了θ角度以后变为了(-sinθ,cosθ)。

那我们现在可以开始构建我们的旋转矩阵(2D):

第一行控制x轴的单位向量的旋转(cosθ,sinθ)
第二行控制y轴的单位向量的旋转(-sinθ,cosθ)


Paste_Image.png

如果是3D的旋转呢?

这时我们就要区分是左手坐标系,还是右手坐标系了,因为不是的坐标系旋转的方向不是不同的,通过左手法则来判断旋转方向。(我们一般都是围绕坐标轴进行旋转)

3D数学基础及图形开发(四)矩阵的线性变换-旋转_第3张图片
Paste_Image.png
3D数学基础及图形开发(四)矩阵的线性变换-旋转_第4张图片
Paste_Image.png

这时我们如果要进行旋转就要先判别是绕着哪一个坐标系进行旋转。

绕x轴进行3D旋转

3D数学基础及图形开发(四)矩阵的线性变换-旋转_第5张图片
Paste_Image.png
3D数学基础及图形开发(四)矩阵的线性变换-旋转_第6张图片
Paste_Image.png

绕y轴进行3D旋转

3D数学基础及图形开发(四)矩阵的线性变换-旋转_第7张图片
Paste_Image.png
3D数学基础及图形开发(四)矩阵的线性变换-旋转_第8张图片
Paste_Image.png

绕z轴进行3D旋转

3D数学基础及图形开发(四)矩阵的线性变换-旋转_第9张图片
Paste_Image.png

3D数学基础及图形开发(四)矩阵的线性变换-旋转_第10张图片
Paste_Image.png

当然你也可以绕任意轴旋转(但计算量会相当的复杂,计算机中最能理解的旋转还是需要欧拉角进行旋转)
Paste_Image.png

我们为什么在程序设计中会使用坐标轴旋转而不使用任意轴旋转呢?:

3D数学基础及图形开发(四)矩阵的线性变换-旋转_第11张图片
Paste_Image.png

以这个机器人为例,这个机器人由无数个点组成,当我们需要旋转它的时,如果每一个点都需要用这么复杂的公式来计算的话会非常的慢。

编程的实现:

  • 首先在头文件中类的成员方法里定义一个方法代表旋转的线性变换。
Paste_Image.png
  • 接着在源文件中进行实现
    • 由于会频繁的使用到sin和cos我们这里在MathUtil头文件中将它封装好在进行使用。
3D数学基础及图形开发(四)矩阵的线性变换-旋转_第12张图片
Paste_Image.png
3D数学基础及图形开发(四)矩阵的线性变换-旋转_第13张图片
Paste_Image.png
3D数学基础及图形开发(四)矩阵的线性变换-旋转_第14张图片
Paste_Image.png

你可能感兴趣的:(3D数学基础及图形开发(四)矩阵的线性变换-旋转)