UnityShader学习笔记_矩阵

矩阵

  • 矩阵的定义
    • 矩阵的记法
    1. 矩阵不是向量,向量是标量的数组,而矩阵是向量的数组。

    2. 矩阵的表示方式,例如4x3行列矩阵,格式如下在这里插入图片描述

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

    • 矩阵的方阵
      1. 行列相等的矩阵就是方阵,例如2X2,3X3等在这里插入图片描述
      2. 对角线元素就是方阵的行列号相同的元素,例如m11,m22,m33
      3. 除了对角线元素其他的元素都为零,称为对角矩阵,例如4X4矩阵在这里插入图片描述
      4. 单位矩阵是一种特殊的对角矩阵,例如在这里插入图片描述
    • 向量与矩阵的使用
      1. 矩阵的行列可以是任意正整数
      2. 向量可以表示为矩阵,因为矩阵是向量的数组,一维矩阵可以表示为向量,两种表示方式如下,一种是行向量,一种是列向量,注意在使用矩阵和向量做数学计算时,要区分是行列向量。在这里插入图片描述
    • 转置矩阵
      1. 矩阵的转置就是把矩阵沿着对角线翻折,看字母位置变化。在这里插入图片描述
      2. 对于向量来说,行列向量也是矩阵的一维表示,可以通过矩阵的转置变化。在这里插入图片描述
      3. 任意矩阵M的转置的转置等于原矩阵,(Mt)t =M
      4. 对于任意对角矩阵D,,D的转置等于原矩阵,Dt=D,包括单位矩阵也是
    • 矩阵的乘法
      1. 矩阵能与标量相乘在这里插入图片描述
    1. 矩阵乘以矩阵有相关规定,例如A与B矩阵的相乘AXB=C,A矩阵的列数必须等于B矩阵的行数才能满足矩阵乘法计算。
      计算法则,C矩阵的第一个元素等于A矩阵的第一行乘以B矩阵的第一列,也就是向量相乘(点乘),因为矩阵是向量的数组。 求出来的C矩阵的列数等于B矩阵的列数,C矩阵的行数等于A矩阵的行数。
      在这里插入图片描述
    2. 假设乘法满足,矩阵乘以单位矩阵,结果就是单位矩阵。MI=IM=M
    3. 矩阵不满足交换律,AB!=BA
    4. 矩阵乘法满足结合律,(AB)C=A(BC)
    5. 矩阵积的转置相当于先转置然后以相反的顺序相乘,(AB)t=BtAt
    • 向量与矩阵的乘法
      1. 向量也是表示一维的矩阵,分为列向量和行向量。
      2. 向量与矩阵相乘也是矩阵与矩阵相乘。
      3. 但左乘向量与右乘矩阵的结果是不同的
        行向量乘法在这里插入图片描述
        列向量乘法在这里插入图片描述
        得到的结果是不同的,注意相乘的前提是满足矩阵的乘法计算。
    1. 如果使用的是行向量乘法,矩阵的乘法顺序是从左到右读,例如vABC,v乘以矩阵A再乘以B乘以C。 如果使用的是列向量乘法,矩阵的乘法顺序是从右到左读,例如CBAv
  • 矩阵的几何意义
    • 矩阵是如何变化向量的
      1. 一个向量解释成一系列与轴平行的位移。例如
        v = [x y z],能被解释为
        = [x 0 0] + [0 y 0] + [0 0 z]
        = x [1 0 0] + y [0 1 0] + z [0 0 1]

      2. 设向量i,j,k分别为指向+x,+y和+z方向的单位向量
        i = [1 0 0]
        j = [0 1 0]
        k = [0 0 1]
        带入以上公式,则有
        v = xi +yj +zk

      3. 这里i,j和k可以称为基向量,一个向量能够用任意3个线性无关的基向量定义,向量可以表示为基向量的线性组合. 例如向量v就是由y与x的线性组合,v=1y+1x,向量v表示向基向量偏移的线性组合。在这里插入图片描述
        可以根据三角形法则推出基向量。在这里插入图片描述

      4. 把i,j,k基向量与矩阵M相乘,以单位矩阵为例,得到在这里插入图片描述
        行矩阵乘法,矩阵的每一行都能解释为转换后的基向量。
        列矩阵乘法,矩阵的每一列都能解释为转换后的基向量。

      5. 向量v与矩阵M相乘有 ,这是行乘法在这里插入图片描述
        = [ u x m 11 u_xm_{11} uxm11+ u y m 21 u_ym_{21} uym21+ u z m 31 u_zm_{31} uzm31 , u x m 12 u_xm_{12} uxm12+ u y m 22 u_ym_{22} uym22+ u z m 32 u_zm_{32} uzm32 , u x m 13 u_xm_{13} uxm13+ u y m 23 u_ym_{23} uym23+ u z m 33 u_zm_{33} uzm33]

        iM=p , jM=q , kM=r ,根据矩阵乘法,带入得在这里插入图片描述
        那么与上面所讲的公式一致,xyz表示ijk方向的缩放,也就是向量v由ijk的线性组合而成 在这里插入图片描述

      6. 逆向推出矩阵,在已知一个向量变换前以及变换后的结果,可以通过矩阵乘法规则推出矩阵M为
        变化后的向量为:= [ u x m 11 u_xm_{11} uxm11+ u y m 21 u_ym_{21} uym21+ u z m 31 u_zm_{31} uzm31 , u x m 12 u_xm_{12} uxm12+ u y m 22 u_ym_{22} uym22+ u z m 32 u_zm_{32} uzm32 , u x m 13 u_xm_{13} uxm13+ u y m 23 u_ym_{23} uym23+ u z m 33 u_zm_{33} uzm33]

        变化前的向量为:= [ u x u_x ux, u y u_y uy, u z u_z uz]

        那么
        [ u x u_x ux, u y u_y uy, u z u_z uz]M= [ u x m 11 u_xm_{11} uxm11+ u y m 21 u_ym_{21} uym21+ u z m 31 u_zm_{31} uzm31 , u x m 12 u_xm_{12} uxm12+ u y m 22 u_ym_{22} uym22+ u z m 32 u_zm_{32} uzm32 , u x m 13 u_xm_{13} uxm13+ u y m 23 u_ym_{23} uym23+ u z m 33 u_zm_{33} uzm33]
        根据矩阵乘法规则,推出矩阵M为
        在这里插入图片描述

      7. 综上,矩阵的行可以解释为变换后的基向量(乘以单位向量时得到矩阵的每一行),那么乘以该矩阵就相当于执行了一次坐标转换,若有aM=b,可以解释为,M将a转换到b

      8. 例子,例如矩阵在这里插入图片描述
        从矩阵中解析基向量p和q,在这里插入图片描述
        具体描述图示,p是通过x轴的单位向量变换得到的,q是通过y轴的单位向量矩阵变换得到的
        在这里插入图片描述
        根据矩阵的行可以解释为的基向量,那么矩阵在这里插入图片描述
        在深入了解,就是可以把某一向量解释以qp为基向量的线性组合 ,例如在这里插入图片描述
        把xy基向量逆时针旋转45度,那么v的向量怎么变换,v变换后的方向是通过缩放或扩展变换后的基向量的线性组合在这里插入图片描述
        可以通过构造矩阵M乘以向量v得到的也是(0,2),注意列乘法与行乘法的区别,这里是列乘法,在这里插入图片描述

      9. 总结

        • 矩阵的每一行可以表示为变换后的基向量(以行向量为例)
        • 矩阵表示是变化,变化向量在不同基向量的表示。
        • 矩阵的变换,符合变换后保持原点,直线和平行线,就是一种线性变换
        • 在列乘法中,一个3x2的矩阵会把一个向量转换为一个三维空间下的向量,矩阵相乘的结果,行会等于第一个矩阵的行,第二个矩阵的列(记住,一个向量可以表示为3x1,或者2x1等矩阵,同理一个2x3的矩阵会把一个向量转换为一个二维空间下的向量
    • 相关资料

      1. B站视频,https://www.bilibili.com/video/BV1Ys411k7yQ/?spm_id_from=333.788.videocard.1
      2. 3D.Math.Primer.for.Graphics.and.Game.Development
      3. UnityShader入门精要
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晨守星

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值