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

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

作者: Levi_Wan | 来源:发表于2016-12-27 23:59 被阅读99次

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

    旋转

    • 2D旋转:a为行向量,M为变换矩阵,b为变换后的向量。
                    aM=b
    Paste_Image.png 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的旋转呢?

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

    Paste_Image.png Paste_Image.png

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

    绕x轴进行3D旋转

    Paste_Image.png Paste_Image.png

    绕y轴进行3D旋转

    Paste_Image.png Paste_Image.png

    绕z轴进行3D旋转

    Paste_Image.png Paste_Image.png
    当然你也可以绕任意轴旋转(但计算量会相当的复杂,计算机中最能理解的旋转还是需要欧拉角进行旋转)
    Paste_Image.png
    我们为什么在程序设计中会使用坐标轴旋转而不使用任意轴旋转呢?: Paste_Image.png

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

    编程的实现:

    • 首先在头文件中类的成员方法里定义一个方法代表旋转的线性变换。
    Paste_Image.png
    • 接着在源文件中进行实现
      • 由于会频繁的使用到sin和cos我们这里在MathUtil头文件中将它封装好在进行使用。
    Paste_Image.png Paste_Image.png Paste_Image.png

    相关文章

      网友评论

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

          本文链接:https://www.haomeiwen.com/subject/nvpevttx.html