美文网首页
OpenGL学习之3D数学

OpenGL学习之3D数学

作者: 懿轩加油 | 来源:发表于2019-05-28 15:48 被阅读0次

    一:向量的记法

    向量的记法.png

    通常使⽤下标法来引⽤向量量的某个分量
    ⽐比如,a1 = 1;a2 = 2 ; a3 = 3
    实际开发中针对的是2D\3D\4D向量量,所以不用下标法
    2D向量量:x y
    3D向量量:x y z
    4D向量量:x y z w

    向量的前面加个-号,表示向量变负

    2:向量大小计算公式

    2D向量大小计算公式
    ||v|| = √Vx² + Vy ²
    3D向量大小计算公式
    ||v|| = √Vx² + Vy ² + Vz²

    3:标准向量

    Vnorm = V / ||V||,注意V不能为0
    零向量是不能被标准的,数学上是不允许的,因为将导致除以0,几何上没有任何意义,因为零向量没有方向

    4:向量的加减

    向量的加减只能是同一纬度下才能加减,否则不能运算

    5:向量之间的距离计算

    (A,B) = ||B - A|| = √(Bx - Ax)² + (By - Ay)² + (Bz - Az)²
    同样的一定是要同一维度下

    5:向量的点乘

    应⽤到2D、3D 中:
    A• B = AxBx + AyBy A,B都是2D向量
    A• B = AxBx + AyBy + AzBz A,B都是3D向量

    点乘的意义

    a• b = ||a||||b||cos(q) (q是两个向量之间的夹角)

    点乘.png
    6:案例(根据向量V和向量N求向量V2和向量V1)
    向量运算.png

    V2计算:
    V2平行于N,即可表示为: V2 = N *||V2|| / ||N||
    因此只要求得V2的模就能计算投影向量的值,借助三角分解,方便求解
    cos q = || V2|| / ||V||
    || V2|| = cos q * ||V||
    V2 = N * cos q * ||V|| / ||N||
    同时乘以||N||后得 V2 = N * cos q * ||V||• ||N||/ ||N||²
    V2 = N * V• N/ ||N||²
    V1计算:
    V1 + V2 = ||V||;
    V1 = ||V|| - V2 = ||V|| - N * V• N/ ||N||²

    7:单位矩阵

    单位矩阵,是⼀种特殊的对⻆矩阵,n维单位矩阵记做 In。是n * n 矩阵。对象元素为1.其他元素为0。
    单位矩阵⾮常特殊,因为它是矩阵乘法单位元,其基本性质是⽤用任意1个矩阵乘以单位矩阵,都将得到原矩阵。所以在某种意义上对矩阵的作⽤用就犹如1对于标量的作⽤。

    例如 3 * 3 单位矩阵

    3*3矩阵.png
    8:矩阵转置

    ⼀个r * c 矩阵M。M的转置记做MT,是⼀个 c * r 矩阵。它的列由M的⾏组成。可以从另⽅面理解。 MijT = Mji ,即沿着矩阵的对⻆线翻折。

    矩阵转置1.png

    对向量而言,转置将使得行向量变成列向量,是列向量变成行向量

    行列向量转置.png
    9:标量和矩阵相乘
    标量和矩阵相乘.png

    设A 为 4 * 2 矩阵,B 为 2 * 5 矩阵,那么结果AB 为 4 * 5 矩阵。

    矩阵与矩阵相乘1.png 矩阵与矩阵相乘2.png

    矩阵相乘法则:对结果中的任意元素Cij,取A的第i行和第j列,将⾏和列中的对应元素相乘。然后将结果相加 (等于A的i列和B的j列的点积)。Cij就等于这个和。

    矩阵与矩阵相乘3.png 矩阵与矩阵相乘4.png
    2乘2矩阵1.png 2乘2矩阵2.png
    矩阵乘法注意事项:

    1.任意矩阵M乘以方阵S,不管从哪边乘,都得到与原矩阵⼤小相同的矩阵。当然,前提是假定乘法有意义。如果S是单位矩阵,结果就是原矩阵M,即:MI = IM = M 。
    2.矩阵乘法不满⾜交换律,即:AB != BA
    3.矩阵乘法满足结合律,即:(AB)C = A(BC)。假定ABC的维数使得其乘法有意义,要注意如果(AB)C有意义,那么A(BC)就 一定有意义。
    4.矩阵乘法也满⾜与标量或向量的结合律,即:(kA)B = k(AB) = A(kB); (vA)B = v(AB);
    5.矩阵积的转置相当于先转置矩阵然后以相反的顺序乘法,即:(AB)T = BT AT

    总结

    行向量左乘矩阵时,结果是行向量;
    列向量右乘矩阵时,结果是列向量;
    行向量右乘矩阵时,结果是⽆意义;
    列向量左乘矩阵时,结果是⽆意义;
    矩阵与向量相乘 注意事项:
    1.结果向量中的每个元素都是原向量与矩阵中单独行或列的点积;
    2.矩阵⼀向量乘法满足对向量加法的分配律,对于向量v,w 和 矩阵M 有,
    (v + w)M = vM + wM;

    为什么要使用列向量?

    1.等式中使⽤列向量形式更好
    2.线性代数书中使用列向量
    3.多本计算机图形学都是使用的列向量
    4.OpenGL 使⽤的是列向量

    10:矩阵是如何变换成向量的

    ?

    ⾸先,向量[1,-3 -4]是如果实现位移
    位移[1,0,0],随后位移[0,-3,0],最后位移[0,0,4]

    矩阵转换为向量1.png 矩阵转换为向量2.png
    向量转换为矩阵.png 基向量乘以3乘3矩阵的情况
    基向量乘以矩阵1.png 基向量乘以矩阵2.png 基向量乘以矩阵3.png 总结

    1:基向量[1,0,0]乘以矩阵M ,结果是M的第⼀行。后⾯的2个⽅程也是⼀样的规律
    2:矩阵的每一个都能解释为转换后的基本向量

    相关文章

      网友评论

          本文标题:OpenGL学习之3D数学

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