现代计算机图形学入门(一)——线性代数基础

本系列文章为学习GAMES101课程的学习笔记,欢迎交流分享

一、向量的乘法(Vector Multiplication)

1.点乘(Dot product)

首先定义两个向量点乘的计算公式是,对应元素相乘再相加
在这里插入图片描述
因此两个向量的点乘的结果是一个数字,其在几何上的意义则是
在这里插入图片描述
因此在图形学中经常逆用该方法,通过向量的点乘之积来推得向量的夹角。
在这里插入图片描述
特殊的,若两个向量都是单位向量,那么两个向量的夹角余弦就是他们的点乘。
在这里插入图片描述
除此之外,还会用点积来求出某个向量在另一个向量上的投影,例如b向量在a向量上的投影
在这里插入图片描述
通过向量的投影,我们可以得出两个向量有多么接近,即根据点乘的结果正负来知晓两个向量离得远近,以此来分解一个向量
在这里插入图片描述
以下式子便是将三维的向量分解到了三维坐标轴上
在这里插入图片描述

除此之外,还可以通过点乘来判断两个向量的方向性,通过值来判断两个向量在方向上是多么接近,是方向基本一致,还是方向基本相反,还是互相垂直。
在这里插入图片描述
这里是向量点乘的一些基本属性
在这里插入图片描述
总结一下,在图形学中,向量的点乘有这几个应用:
①求两个向量之间的夹角
②判断两个向量在方向上有多接近
③分解向量

2.叉乘(Cross product)

两个向量通过叉乘得出的会是一个向量,计算出的向量与原本的两个向量都要垂直,所以叉乘得到的结果一定与原来两个向量不在一个平面内。
在这里插入图片描述
我们通过右手螺旋法则来判定a和b向量叉乘的向量的方向,即四指方向为由a转向b,拇指方向即为叉积的方向。需要注意的是,向量的叉积并不满足交换定律(与点乘不同),因为不同方向得到的向量会方向相反,在图形学中经常运用向量的叉积来建立直角坐标系,如果在一个坐标系中x叉乘y得到的向量是z,那么我们就说建立的是一个直角坐标系,那么同时她也满足一下这些公式。
在这里插入图片描述
除此之外,我们还需要注意一些它的性质,例如向量自身的叉积是一个0向量,因为他们的夹角为0.在这里插入图片描述
那么向量的叉积在图形学中的应用是可以判断向量的左和右,内与外的信息。

判断左和右
例如上图中b叉乘a得到的向量z是一个负的,说明b是在a的左侧,以此为基础,我们可以还可以判定向量间内与外的关系
判断里和外
比如上述向量中,让ap与ab向量作叉积,得到ap在ab的左边,再由bp与bc做叉积,得到bp在bc左边,以此类推,cp在ca的左边,那么我们推理得到p在三角形abc的内侧,以此类推,只有p点一直都在三角形三条边的左边或者一直都在右边,就可以说明p在三角形abc的内部,具体是左还是右,由三条边旋转的方向决定。有一个特殊的例子就是叉乘为0,这个点正好在三角形的边上,这种情况在图形学中叫做corner case,表示为自己决定是在内还是在外。

二、矩阵(Matrix)

1.矩阵的乘法

矩阵乘法中要注意前面一个矩阵的列数要与后面一个矩阵的行数相同,那么我们如何计算所得矩阵中的每个元素呢?例如我们要求2行4列元素的值,那么我们可以去找前一个矩阵第二行的行向量,和后面矩阵第四列的列向量进行点乘即可。
在这里插入图片描述

2.矩阵的常用性质

要注意的是,矩阵的乘法不满足交换律,但是结合律和分配律满足。
在这里插入图片描述
还有一些其他的公式:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

3.向量乘法与矩阵的关系

其实向量的点乘和叉乘都可以写成矩阵的形式,例如向量的点乘:
在这里插入图片描述
向量的叉乘:
在这里插入图片描述

三、变换(Transformation)

1.线性变换

在图形学中,我们经常会需要进行图形上的变化,比如平移,旋转等操作。例如我们需要进行缩放这个操作:
在这里插入图片描述

那么对于该图形上所有的点,我们都需要对其进行缩放,因此我们可以将其上所有的坐标写成这样一个公式:
在这里插入图片描述
还有反射操作,其上所有的x坐标变为相反数,y坐标不变
在这里插入图片描述
同理我们也可以得到这样的公式:
在这里插入图片描述
图形操作中还有一种特殊的操作叫做切变(sheer),我们可以看到他们的y坐标没有发生变化,x坐标向右移动了a距离
在这里插入图片描述
因此我们可以得到如下矩阵形式:
在这里插入图片描述
在图形学中,我们规定了旋转操作有如下定义:
①绕着原点旋转
②不说旋转方向,默认逆时针旋转方向
例如在图形学中我们说旋转θ便是如下场景:
在这里插入图片描述
这个旋转矩阵,我们可以随便取其中两点进行旋转操作,我们便可以把旋转操作给推出来
在这里插入图片描述
因此我们可以得到一个旋转矩阵:
在这里插入图片描述
如果我们要对图形旋转-θ,那么我们可以将-θ带入原来的方程,可以得到结果。我们会发现旋转的逆矩阵等于旋转矩阵的转置,我们在数学上将这种矩阵称为正交矩阵
在这里插入图片描述
由以上操作我们可以发现,这些操作都可以写成一个线性的形式,我们定义可以写成这种形式的变换称为线性变换
在这里插入图片描述

2.齐次坐标

对于旋转,放缩等操作我们可以写成矩阵形式,但是对于我们常见的平移变换,我们发现无法写成线性变换的形式:
在这里插入图片描述
平移得到的形式是这样的,我们称这种变换为仿射变换:
在这里插入图片描述
为了解决这个问题,我们希望平移的表达式可以和其他变换的表达式是一样的,所以我们引入了齐次坐标,但首先要注意的是,在计算机科学中,我们解决某个问题,经常是牺牲了一部分来换取另一部分的优化,例如牺牲空间来换取时间,因此我们关注齐次坐标的同时,也需要关注它的引入牺牲了什么。
在这里插入图片描述
在齐次坐标中,我们将二维的点增加了一个维度,其中将点中该维度值设定为1,向量中该维度值设定为0,此时我们再看平移操作的表达式:
在这里插入图片描述
我们看到其中三维矩阵的前两行两列范围内就是我们想要平移所表示的 ,那么问题来了,我们为什么要这么定义向量和点呢?浅显的解释是我们定义了向量是不变的,所以我们定义了向量增加的一维坐标是0,这样可以保证向量在平移过程中是不变的,深层次的解释则是为了满足如下关系:
在这里插入图片描述
对于其中的第四点性质,我们定义了在齐次坐标中,任何点都具有这样的性质,即任何一个点都可以表示为这样的形式,那么其实这样点加上点表示的是这两个点的中点。
在这里插入图片描述
因此,通过引入齐次坐标,我们可以将仿射变换也写成齐次变换,也就是这种形式:
在这里插入图片描述
我们可以发现,在这个矩阵中,最下面一行一直都是(0,0,1)【注意:只有在2维情况下的仿射变换下,才是(0,0,1),其他变换可不是】,左上面则是线性变换的矩阵,右边则是平移需要加上的数,因此我们也可以将各种变换的形式也写出来:
缩放
旋转
平移
当然我们也可以看出他的缺点,就是引入一个新的数,但是这个影响对于我们来说问题不大,因此算是比较完美的一种统一方式。

3.其他变换

逆矩阵在变换中可以表示逆变换:
在这里插入图片描述
还有复杂的变换是可以通过简单变换的合成来得到,而且变换的顺序是不可变得。
在这里插入图片描述
例如我们对这个图形先进性旋转45°,再进行平移操作,可以写成:
在这里插入图片描述
由此来推广,我们对一个矩阵进行不断的变换,可以写成:
在这里插入图片描述
其中我们使用结合律,可以将前面n个A矩阵写成结合写成一个矩阵,这个矩阵还是一个3x3的矩阵,所以我们可以得知一个3x3的矩阵可以表示图形的复杂操作,同样的道理,操作也可以进行分解:
在这里插入图片描述
例如我们定义了所有的旋转都是绕着原点进行旋转操作,那么我们先把点移到原点,再进行旋转操作,再移回去,即写为:
在这里插入图片描述

4.三维空间的定义

由二维的点我们可以定义三维空间的点和向量
在这里插入图片描述
还有三维空间点的定义也可以推广:
在这里插入图片描述
还有三维空间齐次坐标描述的矩阵:
在这里插入图片描述
那么有个小问题,在该形式下我们是先进行平移还是线性变换呢?其实我们在2D的时候就已经发现了,是先进行线性变换,再进行平移

参考视频:https://www.bilibili.com/video/BV1X7411F744?p=3&spm_id_from=pageDriver

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值