GAME101-Lecture03学习

变换引入目的

建模、3D转2D(投影)

image-20240417214811477

缩放(变换)

image-20240417233641105

image-20240417233647324

image-20240417233701179

反射/对称(变换)

image-20240417233817350

切变

image-20240417214916402

  • 提示:

  • 水平位移在y=0处为0

  • 水平位移在y=1处为a

  • 垂直位移总是0

整体:只是水平方向发生移动,竖直方向没有变化

上面的边:水平方向移动的都是a

中间的位置(y=0.5时):水平方向移动都是0.5a

总结可以认为,水平位置移动了a*y。x' = x+ay,y'=y,写成矩阵形式就是右下角的样子。

旋转(变换)

我们自己规定,任何旋转没有特地说明,都认为是绕着原点(0,0)旋转,旋转方向默认逆时针。

旋转矩阵

image-20240417215439805

旋转矩阵推导过程

image-20240417220007752

列向量左乘矩阵

  • 首先,(x,y)--->(x',y')肯定是x和y分别乘以了某些系数,从而才能达到(x',y')的效果。(前面切变那里的分析过程

  • 按照切变的例子,向量(x',y')可以转化成向量乘矩阵的形式就是闫老师写出的那个ABCD的式子(图中黑色箭头尾端的式子)。此时问题就转化成了解出ABCD的值。

  • 要解矩阵,可以通过到带入特殊值的方式。最上面靠右的图就是闫老师演示的某种特殊情况,(1,0)--->(cosθ,sinθ),将其带入待解式子即可(图中黑色部分)

  • 要完全解出来四个参数ABCD,找两个特殊解即可。

(弹幕中有补充一般性的问题,闫老师这种解法是可以的)

线性变换

image-20240417221233333

如果能把变换写成上图的这种形式(即用矩阵乘以输入的坐标可以得到输出的坐标),这种变换叫做线性变换。

即对于一个变换,用一个矩阵表示。

齐次坐标

引入齐次坐标的主要原因是平移变换比较特殊,简单的表示成前面所需的一个矩阵乘以一个向量的形式,而不是让平移变换成为一个特殊的变换。

后续的推导起到帮助理解的作用。

引入目的

image-20240417221910780

image-20240417221925820

  • 平移不能以矩阵形式表示(所以,翻译不是线性变换!)

  • 但我们不希望翻译成为一个特例

  • 是否有一种统一的方式来表示所有的转换?成本是多少

平移的变换主要是加法,看着简单,但是像前面那样,通过矩阵的解法列出的话,会很复杂(如第二幅图)。(弹幕中说,这在线性代数中,叫做非齐次方程)

并且,由于平移的变换中,矩阵乘法后面还要做一个加法,因此平移变换不是线性变换

齐次坐标的解决方案

用齐次坐标,通过增加一个数(一个维度)让平移变换写成矩阵乘以向量的形式(其他的线性变换也可以这么写),如下图(x',y',w')的变换:

image-20240417223038073

齐次的“保护性”

向量表示的是方向性,向量平移表示的任是同一个向量,这说明向量具有平移不变性。

那么如果有一个向量(x,y,0),经过矩阵的变换,若想让他不变(依旧是(x+t,y+t,0))。可以增加一个0(一个维度)保护他。

image-20240417223410477

  • 齐次坐标

  • 如果结果的w坐标为1或0,则有效操作

在空间中(二维或三维),向量加上向量(三角形法则)得到一个新的向量。

点减去点,得到新的向量。

点加上向量,点沿着一条线移动,移动到一个新的点上。

点加点的扩充定义:在二维中,当w不等于0,可以让其转成(x/w,y/w,1),w=1就可以表示成一个二维的点(x/w,y/w)。

因此点加点得到的是这两个点的中点

上述阐述了,最后一位是0,不仅保证了其平移不变性,还能保证在操作下是对的。

仿射变换

image-20240417224820539

图中上方的式子,我们称为仿射变换。

在图中下方的式子中,我们用一个式子(齐次坐标)表示了所有的变换

用齐次坐标去表示二维的仿射变化时,可以发现:

  • 矩阵的最后一行永远是001

  • 平移永远是写在最后一列的头两个数上

  • 前两列的前两个元素是原来线性变换的部分

2D(二维)变换

image-20240417225121008

缩放变换中,没有平移,因此最后一列头两个数是00。

旋转变换中,平移和缩放同理。

平移变换中,没有经过线性变换,左上角是单位矩阵1001,有平移因此最后一列头两个数是tx ty。

逆变换

image-20240417225508580

逆变换在矩阵中,就是乘以逆矩阵。

组合变换

image-20240417225649265

  • 如何才能从左边变换成右边?

image-20240417225656282

  • 先平移再旋转,发现不可行

image-20240417225705466

  • 先旋转在平移,发现可行

通过上面的例子,可以知道

  • 复杂的变换可以通过简单的变化得到

  • 变换的顺序很重要

  • 这和矩阵的乘法一致,矩阵没有交换律

image-20240417225940346

向量默认时一个列矩阵,因此做变换的时候需要从左往右乘。(如图,列矩阵xy1先做旋转再做平移,因此先左乘一个R再左乘一个T)

推广

image-20240417230313249

  • 仿射变换序列A1、A2、A3,…由矩阵乘法构成

  • 对性能非常重要!

  • 对n个矩阵进行预相乘以获得表示组合变换的单个矩阵

先将前面的矩阵全部乘完,乘完还是一个3*3的矩阵。这说明一个3*3的矩阵可以表示很复杂的变换。

分解变换

image-20240417230947003

  • 如何围绕一个给定的点c旋转?

  • 将中心转换为原点

  • 旋转

  • 移动回来

相当于在二维中,图形绕着任意一个点旋转,都可以转换成:先把图形平移使得旋转点与原点重合,再绕原点旋转,然后再把旋转后的图形移回相同的参数

3D变换

三维空间的变换,可以类比二维的。

注意区别,三维的点和向量增加一个数(升维)后,并不是四元数,四元数是专门用来表示旋转的。

image-20240417231500879

  • 再次使用齐次坐标

image-20240417231558326

最后一行还是0001

平移:依旧是在最后一列

线性变换:左上角的3*3矩阵

课堂启发

可以把仿射变换写成一个简单的矩阵形式,矩阵表示线性操作和平移操作。

课堂问题

闫老师留下来的问题:在三维的变换中,矩阵应用在xyz这个三维点上,是先平移还是先线性变换呢?

解答:可以看前面,2D下仿射变换的式子,是线性变换(矩阵乘以向量)加上平移变换。因此是先线性变换再平移变换。

总结

今天讲的是各种变换,前面所有的变换都是以2D为例的,3D其实也是同理。

缩放、对称、旋转等这些变换,能够直接用矩阵乘以向量的形式表示,称为线性变换。

平移不能以矩阵乘以向量表示,并不是平移变换。其形式是矩阵乘以向量加上一个矩阵,可以称之为仿射变换。

如果将平移看作特殊的变化,那又太过麻烦。为了让所有的变换具有统一性,引入了齐次坐标的知识。

齐次坐标能够通过加一个数(升维)的方式,通过齐次坐标来表示仿射变换。其次坐标也可以表示线性变换。

因此,能够用齐次坐标的方式,将所有的变换转变成矩阵与向量的形式。

将单一的变换累加,就是组合变换。组合变换中,变换的顺序很重要。

在组合变换中发现,先将所有的变换矩阵相乘,还是能得到一个矩阵,这说明任何复杂的变换都能用一个矩阵来表示。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值