美文网首页
OpenGL8.0 3D数学矩阵变换基础

OpenGL8.0 3D数学矩阵变换基础

作者: 数字d | 来源:发表于2019-07-16 16:21 被阅读0次

    1.矩阵
    矩阵(Matrix)是一个按照长方阵列排列的复数或实数集合。
    在图像处理中的图像的仿射变换一般可以表示为一个仿射矩阵和一张原始图像相乘的形式。

    认识矩阵:

    1.png

    矩阵维度和记忆方法:

    2.png

    Mij 表示矩阵M的第i行第j列元素

    方阵:
    行数和列数相同的矩阵叫做方阵:

    3.png
    方阵的对角线元素:
    方阵的对角线元素就是方阵的行号和列号相同的元素,例如 3 * 3 方阵M的对角线元素是m 11、m22、m33

    单元矩阵又叫做单元矩阵:


    4.png

    n维单元矩阵记作In 对象元素为1其他元素为0,例如I3

    5.png

    单位矩阵非常特殊,因为它是矩阵乘法单位元,其基本性质是用任意一个矩阵乘以单位矩阵,都将得原矩阵。所以在某种意义上单位矩阵对矩阵的意义就像1对于标量的作用。

    向量作为矩阵使用:


    6.png
    7.png

    矩阵的转置:
    一个r * c 的矩阵M,它的转置记作MT转置之后得到的矩阵是c * r 的。简单理解为按照对角线将矩阵从左下角往右上角翻折。

    8.png

    对于向量而言,行向量的转置是列向量,列向量的转置是行向量。


    9.png

    标量和矩阵相乘:

    10.png

    矩阵与矩阵相乘:
    设A为4 * 2 矩阵 ,B为2 * 5矩阵,那么AB的结果为4 * 5矩阵

    矩阵相乘有意义的前提:

    11.png

    而实际有效的速记方法,是将每个结果矩阵值的下标写好,然后一一对应每个值的得出方法.

    12.png

    这里举例是C24 那么a的第一个下标一定是2,b的第二个下标一定是4。
    而a的第二个下标一定和b的第一个下标是一样的。
    另:表达式一定是矩阵A的列数或者矩阵B的行数一样,这里举例的值是2;
    由以上的规律对所有数据进行穷举。
    a的第二个下标为1的时候得出的值是a21b14
    a的第二个下标为2的时候得出的值是
    a22b24
    这样是一种通用的解决办法,虽然好记但是不利于理解。
    其实还是蛮佩服那种不用通用解法的人,赞!!!

    再说几点注意事项:
    1.任意矩阵M乘以方阵S,不管从那边乘,得到的都是和矩阵M大小相同的矩阵,比如说原来Mij乘出来的结果还是Mij,当然这是在乘法有意义的前提下才有规律。
    2.矩阵乘法不满足交换律:
    AB != BA

    3.矩阵乘法满足结合律:(AB)C = A (BC) ,如果ABC的维数使得其乘法有意义,那么也就是说如果(AB)C有意义,那么A(BC)一定有意义。

    4.矩阵乘法也满足标量与向量的结合律:
    (kA)B = k(AB)= A(kB)

    5.矩阵积的转置等于先各自转置再以相反的顺序相乘。
    (AB)T = BTAT

    矩阵和向量相乘:
    不管是矩阵乘向量还是向量乘矩阵首先需要保证矩阵和向量相乘的意义。
    另:1.结果向量中的每个元素都是原向量或者矩阵中的单独行或列的点积。
    2.矩阵-向量乘法满足对向量加法分配率对于向量v,w和矩阵M,有:
    (v + w)M = vM + wM;

    行向量与列向量的使用场景:
    1.文字中使用行向量方便书写。
    2.用矩阵乘法实现坐标转换时候,向量左乘矩阵的方式更加方便。
    3.DirectX使用的是行向量。
    DirectX是由微软公司创建的多媒体编程接口,由C++编程语言实现,它们旨在使基于windows的计算机成为运行和显示具有丰富多媒体元素(例如,全色图形,多媒体,3D动画和丰富音频)的应用程序的理想平台。

    列向量的使用场景:
    1.等式中使用列向量形式更好
    2.线性代数书中使用列向量
    3.大部分计算机图形学的书中都是用的列向量
    4.OpenGL使用的是列向量

    相关文章

      网友评论

          本文标题:OpenGL8.0 3D数学矩阵变换基础

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