线代与图形学的暧昧二三事

A Swift and Brutal Introduction to Linear Algebra

计算机图形学依赖于线性代数、微积分、统计...物理方面涉及到光学(波动光学:不再假设光是直线传播,作为一种光波与物体表面材质进行作用接触,如何生成不同的外观)和力学,还涉及到信号处理(分析走样、反走样技术,解决信号处理的事情),数值分析也很重要(解决一些复杂的数学计算:积分、渲染,解决递归定义的积分、模拟仿真、拓展方程...),还需要一点点美学

一个例子

52d7781f6f0745b8bb17d9a13e304a1d.png

旋转的小蜗,壳上的亮晶晶随着旋转来回摆动,不是匀速旋转,到中间速度达到峰值,不是以固定速度旋转,用到了旋转矩阵的知识

向量

基础认识

39dd8b5041644343ab55acfa6449a5df.jpeg

名称上有区别,在数学中他叫向量,物理学(照亮世界)的诨名叫矢量,表示方向(B坐标 - A坐标),平移向量不发生变化,还是最初的美好

向量的两个重要属性:方向 + 长度

73b6a53a2f2d468f87f98dbe19ba34b1.png

回忆单位向量,在图形学里用单位向量可直接表示方向(a头顶一个hat,在图形学中用于表示单位向量)

 操作

相加

f85c25f1d31c4875b49179bf1c2fdb2b.png

涉及平行四边形法则、三角形法则 

表示

笛卡尔坐标系表示向量

 f610211247514c24954accaf8bd8cc9f.png

X、Y通常垂直且定义成单位向量,好处:可用(4,3)表示向量

向量的缺省设置是列向量(矩阵左乘方便)

db830fbcf1924443965038259009d1f3.jpeg

为什么这样设置捏?

如果这样定义,两坐标轴垂直,以单位向量为单位,算向量长度就很简单啦

eq?%7C%7CA%7C%7C%20%3D%20%5Csqrt%7Bx%5E2+y%5E2%7D

Dot product

b265dae0f4f245e6928f00cb8030c57e.jpeg

在图形学中的应用: 做简单变换,给定两个向量可算出夹角余弦,可帮助我们快速得到两个向量的夹角,在两个向量都是单位向量的时候尤为方便

点乘满足这些定律:

b70c6c00ef604d4685163e2fab18ce0a.png

相乘后相加,定律可扩展到高维(2D -- > 3D) 

7e41610143714663acbcb1427074f3b3.jpeg

点乘在图形学中的应用:找到两个方向的夹角(光照模型的光照进来的方向,物体表面法线,从哪个方向看)

a91c0b3adfb44cc5a08b7acbd6d6eb7c.png

找到向量的投影长什么样:

ae08183e0ccb42bfba12f0915a171d35.png

现在a、b两个向量方向不一样,希望将b向量投影到a向量上去,假如有一束光线垂直于a向量的方向照射过来,则b向量会在a向量上投射出一片阴影(b在a上的投影),那我们具体应该怎样计算呢?需要用到向量的基本属性:长度和方向,既然b向量投影到a向量上了,那投影一定是沿着a方向的,b perpu(perpendicular)的方向确定,可以用它表示成a向量的单位向量x长度,最终长度为b向量的长度x   b向量与a向量夹角的余弦,夹角的余弦用点积求:

ffe2acfe9d4f470d9a856883f859d757.png

 算出投影有什么好处呢?

我们可以把一个向量分解成两个向量,一个方向平行于某个方向,另一个方向垂直于某个方向

叉乘,根据平行四边形法则可推导出上面的结果,点乘带来的好处是可以对任意一个向量进行垂直与平行的分解,在图形学中,点乘还可以带来另外的好处:可以计算两个向量的方向有多接近,接近:算两个向量点乘的结果,根据点乘的结果知道两个方向是接近还是远离

点乘还可帮助大家获取前与后的信息

288e44322e184ca1897f99969be6b1e2.png

给定向量a的方向,从a的方向上下割据形成两个半圆,如果向量的终点是落在虚线以上的,那可以认为a和b向量都是向前的,c向量的终点落在了下半部分,可以认定a向量和c向量方向基本上是相反的,点乘的好处这就体现出来了:a和b点乘会获得一个正数,a和c点乘会获得一个负数,假如还有一个向量刚好落在虚线上,那最终结果是0

向量的点乘可以告知我们方向性:基本一致,相反,垂直

同样的,点乘还可以告诉我们两个向量有多接近,如果比较接近,点乘出来的结果就会比较接近1,远离后渐渐变成0,再远一点会渐渐变成-1,直到完全变成-1,可以告诉我们值有多接近

那点乘看两个向量是否接近又有什么应用呢?

比如一束光打在一面镜子上,肯定是会反射的,如果眼睛从出射光方向看过去,就会发现一个反光点很亮,如果错开一点点就看不到闪烁的光亮(比如金属的发光,入射光打到金属表面,会反射,在周围观测会得到这样的结果,离远则看不到,需要方法提供两个向量是否接近标准)

Cross product

向量的叉积虽然也是乘法,但是和点积完全不一样的运算

579d78fdf831409d9b77b0469e350eb9.jpeg

叉积会输入两个向量a和b,会计算出另外一个向量,两向量叉积的结果和原本的两个向量都垂直,即该向量垂直于ab所在的平面内,那方向怎么确定捏?需要根据右手定则来弄了!

什么是右手定则(你不是学过吗)

其实有两种右手定则,一种是伸出三根手指(拇指食指中指),摆成互相垂直的方向

但更为常见的是右手螺旋定则,算叉积从a旋转到b方向,拇指指向的方向就是叉积结果向量的方向,我们可以发现从b到a方向是相反的(叉积并不满足交换律),那向量的叉积有什么作用呢?

我们可以用向量的叉积建立三维空间中的直角坐标系

7a093ba2af3340b98b199cc53ef83daf.jpeg

可以通过x轴叉乘y轴的方式算出z轴,如果x轴和y轴叉乘得到z轴建立三维空间直角坐标系,那这个坐标系就被称为右手坐标系

自己叉乘自己得到零向量

向量叉乘在代数上也可写出,但是相对复杂,a向量叉乘b向量得到的是一个列向量,在笛卡尔坐标系中,向量的叉乘也可以重新写出来,向量的叉乘可以表示成对应的矩阵形式,矩阵相乘一样可得出以上结果

35a3f4441231412dbe6eab8cee9555c9.jpeg

向量的叉积(叉乘)的重要应用:判定左右、判定内外

981c34e5aa34404e8f98264bdb53f3c1.png 

为什么给定两个向量的叉积就能判定左和右的信息呢?

 1634414c6ae64077a91160c47c009fb2.jpeg

 那怎么判断左右呢?左面这幅图的右手系xyz都有,判定b在a的左侧还是右侧,从直观上看图我们可以判断b向量在a向量的左侧,在数字上如何表示呢?也很简单,就是a叉乘b得到的结果是正的,就可以判定b在a的左侧,反过来则在右侧

判断左右是一方面,叉积还可判断内外,已知有三角形ABC,想要判断P点是否在三角形内部,就需要应用到叉积了,我们可以这样做叉积:AB和AP做叉积,BP和BC做叉积,CP和CA做叉积,得到的结果都是正的,也就是说P点在AB、BC、CA的左边(如果顺时针排布也没关系,如此就是P都在三条边的右边),如果擦边就自己说了算

Orthonormal bases and coordinate frames

1f939acb8d134d8b841b57f462fc29bd.jpeg

定义u、v、w都是单位向量,点乘等于零互相垂直,叉乘后得到三维右手直角坐标系,这样定义有什么好处呢?好处就是我们可以把任意向量分解到这三个坐标轴上去,投影做需要点积

Matrices

计算机图形学很多地方都会涉及到矩阵

f27cd660b8dd480b8befa80fa44b9fb6.png

矩阵在变换上应用较多,应用矩阵可做基础变换:移动、旋转、缩放...

矩阵是什么捏?

41e857e6ea684d4ca8a67339e163022d.jpeg

很简单,矩阵是一堆数安排在平面上变成几行几列的结构,上面矩阵三行两列(3×2)

矩阵×数即把矩阵中每个数都×这个数

最困难且有用的操作是矩阵的乘积

830684946c4f496fab8fd408b95c0991.jpeg

给定两个矩阵也要它们能乘才可以 (第一个矩阵的列数=第二个矩阵的行数)

矩阵相乘不满足交换律:

b46dc3ce810c4f378f98a491535eb13c.png

结合律很有用 

矩阵和向量相乘(列向量)

fea3cf8e1c9a4aeb8a222e0fb2f44976.png

通过算变换,将x和y变成-x和y,可用于求镜像

矩阵转置

68bc66244af146cfb0a2b35884279e85.jpeg

行列互换,没什么好说的 (乘积转置顺序要做调换)

单位矩阵

04e7c181b7ae415ea7fb4332c300ed19.jpeg

单位矩阵基本上不用来做任何操作,但可以用来计算矩阵的逆,两个矩阵相乘得到单位阵,则这两个矩阵互逆

415fa457141841e891a356fcd5e8ec3b.jpeg

 向量的点乘和叉乘都可以写成矩阵形式,叉乘则是A*和b相乘(后续旋转的 推导方面很有用)

场景实例:相机(视角)在场景中移动,可以向各个方向看,涉及到旋转,如何定义相机的运动和变换

哼哼,,,

8e3bec2f1ac9499396da6ef2181fa5b4.png

 

 

  • 15
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值