计算机图形学(一): 线性代数概览(上)

我正在参加「掘金·启航计划」

本文系原创,转载请注明出处.码字不易,希望大家多多关注,多多点赞!

开新坑啦,本文是系列文章”计算机图形学”的第一篇: 线性代数概览,之所以第一篇就讲线性代数,是因为线性代数是计算机图形学的基础,所谓”勿在浮沙筑高台”,线性代数是构筑图形学这座大厦的根基,扎实的线性代数基础,尤其是其几何意义深刻理解,对于图形学尤为重要,具体体现在以下几个方面:

  • 线性代数做为几何,物理等计算有效沟通的桥梁
  • 在图形学的许多领域,一旦你能用线性代数表示问题的解,基本上问题就解决一半了,剩下的只是让计算机求解 Ax = b
  • 高效的线性代数数值运算使现代计算机图形学成为可能(图像处理, 基于物理的动画, 几何处理等等)

向量空间

向量

向量是什么

首先我们要问自己一个问题,向量到底是什么?从直观感受来说,向量其实就是一个指向某个方向的小箭头而已:

1687359062584.jpg

那我们如何表示一个向量, 如何测量一个向量,一个完整的向量由哪些必要的属性来构成呢?
从根本上说,只有方向大小:

image.png

例如:一个二维向量可以由一个角度thetatheta和长度r来表示(极坐标系)

除了极坐标系外,我们还可以用笛卡尔坐标系(cartesian coordinates)来表示向量:

3.jpg

通过向量我们可以执行哪些操作?

向量相加

首先我们可以对两个向量相加,通过把他们进行首尾相连的方式:

4.jpg

想象有一个物体,先沿着u\vec{u}行进然后再沿着v\vec{v}方向行进,最终到达的位置即向量u\vec{u} + v\vec{v}的”终点位置”,此即为向量加法的几何意义.另外如果我们先沿着v\vec{v}方向行进,再沿着u\vec{u}方向行进,得到的结果是一样的,即:

向量加法满足交换律: u\vec{u} + v\vec{v} = v\vec{v} + u\vec{u}

向量与标量乘法

其次,我们可以对向量进行缩放:

1687362437124.jpg

通常情况下,任何向量u\vec{u}都可以乘以标量aa得到一个新的向量aua\vec{u},其几何意义也非常明显,通过缩放因子a对向量u\vec{u}进行缩放.

向量与标量乘法满足结合律: a(bu)a(b\vec{u}) = (ab)u(ab)\vec{u}

向量加法与缩放一起使用

6.png

a(u+v)=au+ava(\vec{u} + \vec{v}) = a\vec{u} + a\vec{v}

向量空间(Vector Space)正式定义

对于任意的向量u\vec{u} v\vec{v} w\vec{w}和标量a,ba,b:

  1. u\vec{u} + v\vec{v} = v\vec{v} + u\vec{u}
  2. u\vec{u} + (v\vec{v} + w\vec{w})= (u\vec{u} + v\vec{v}) + w\vec{w}
  3. 存在一个零向量0\vec{0}使得: v\vec{v} + 0\vec{0} = 0\vec{0} + v\vec{v} = v\vec{v}
  4. 对于任意的v\vec{v}: v\vec{v} + (v\vec{-v}) = 0
  5. 1v\vec{v} = v\vec{v}
  6. a(bv)a(b\vec{v}) = (ab)v(ab)\vec{v}
  7. a(u+v)=au+ava(\vec{u} + \vec{v}) = a\vec{u} + a\vec{v}
  8. (a+b)v(a+b)\vec{v} = av+bva\vec{v} + b\vec{v}

注1:任何满足以上所有条件的对象都是一个向量空间,尽管他们看起来不太像小箭头:)

注2:以上所有这些定义并不是凭空捏造的,而是有其直观的几何意义,了解公式背后的几何意义对于图形学的深入更重要.

欧几里得向量空间(Euclidean Vector Space)

欧几里得向量空间是几何的基本空间,用来表示物理空间,最初在欧几里得几何中,它是欧几里得几何的三维空间,但在现代数学中,有任何正整数维数nn的欧几里得空间,被称为欧几里得nn维空间,当n=1n = 1时,只有一个维度,几何上表示为一条线,当n=2n = 2时, 表示为一个二维平面.当n=3n = 3时,代表三维空间,欧几里得向量空间通常用符号RnR^n表示:

7.jpg

函数也是向量

在图形学中另外一个向量空间很重要的例子是函数空间(spaces of functions),这些函数可以用来描述一张图片中每个像素的颜色,也可以用来描述几何的形状等等.函数也是向量,对向量执行的任何操作(add & scaling)对函数同样适用.

8.jpg

为什么函数也是向量

让我们从最基本的向量加法和向量缩放开始验证.

两函数相加:
9.jpg

函数缩放:
10.jpg

笛卡尔坐标系下的向量运算

向量相加

11.jpg

向量缩放

13.jpg

计算中点

14.jpg
想象由向量a\vec{a}b\vec{b}所构成的平行四边形,平行四边形的对角线就是a\vec{a} + b\vec{b},于是中点向量m\vec{m} = 1/2(a(\vec{a} + b)\vec{b})

向量的模(Norm | length | magnitude)

前边我们讲过表达向量的两个维度,方向和大小,接下来我们着重说明向量的模是如何定义的.
对于一个给定的向量v\vec{v},我们用符号v|v|表示其大小.直觉上来看,向量的v|v|描述了向量有多大.
15.jpg

向量模的性质

  1. 非负性: v>=0|v| >= 0
  2. 如果一个向量的大小为0,则它为0向量: v=0v=0|v| = 0 \Rightarrow \vec{v} = \vec{0}
  3. 如果对一个向量缩放c,则它的大小同样会缩放c: cv=cv|c\vec{v}| = c|\vec{v}|
  4. 我们知道两点之间直线最短,因此: u+v>=u+v|\vec{u}| + |\vec{v}| >= |\vec{u} + \vec{v}|

向量的模正式定义

向量大小是一个输入参数为向量返回标量的函数,对于任意给定的向量u\vec{u},v\vec{v}和标量aa,向量大小需满足以下条件:

  1. v>=0|v| >= 0
  2. v=0v=0|v| = 0 \Rightarrow \vec{v} = \vec{0}
  3. cv=cv|c\vec{v}| = c|\vec{v}|
  4. u+v>=u+v|\vec{u}| + |\vec{v}| >= |\vec{u} + \vec{v}|

笛卡尔坐标系下向量模的运算

v=(v1,...,vn)=i=1nvi2|\vec{v}| = |(v1,…,v_{n})| = \sqrt{\sum_{i=1}^{n} v_{i}^2}

函数的模(L2L^2 Norm of Functions)

和笛卡尔坐标系下的向量一样,从概念上来说,函数的L2L^2模描述了其的”大小”.假设有一个定义域在区间[0,1][0,1]上的可积分函数ff,则该函数的L2L^2Norm定义如下:

f=01f(x)2dx||f|| = \sqrt{\int_{0}^{1}f(x)^2dx }

16.jpg

向量点积(Inner Product)

除了向量的大小,之前我们说过向量还有方向,就像向量的模测量其大小一样,向量点积描述了两个向量的方向一致性:
1687401615162.jpg

前边我们说过图片也是一种向量,可以这样理解,图片中每个像素相当于欧几里得向量空间中的一个维度,因此我们同样可以对图片使用点积来描述两张图片的相似性:

18.jpg

对称性

当我们使用向量点积来描述向量的方向一致性时,根本上来说描述的是它们之间的相对关系,点积的顺序是无关紧要的:

19.jpg注:我们用符号<u,v><u, v>表示向量的点积

计算投影

对于任意单位向量u\vec{u}v\vec{v}(向量的模为1),其点积为其中一个向量投影到另外一个向量上的长度:

20.jpg

如果我们对参与点积运算的任意个向量缩放,则其点积也会执行同样程度的缩放:

21.jpg

点积正式定义

点积是一个输入参数为两个向量返回一个标量的函数,描述了两个向量方向的一致性,该函数满足以下条件:

  1. <u,v>=<v,u><\mathbf{u} , \mathbf{v} > = <\mathbf{v}, \mathbf{u} >
  2. <u,v>>=0<\mathbf{u}, \mathbf{v}> >= 0
  3. <u,u>=0u=0<\mathbf{u}, \mathbf{u}> = 0 \Rightarrow \vec{u} = \vec{0}
  4. <au,v>=a<u,v><a\mathbf{u}, \mathbf{v}> = a<\mathbf{u}, \mathbf{v} >
  5. <u+v,w>=<u,w>+<v,w><\mathbf{u}+\mathbf{v}, \mathbf{w}> = <\mathbf{u}, \mathbf{w}> + <\mathbf{v}, \mathbf{w}>

笛卡尔坐标系下的点积定义

标准的点积也就是所谓的欧几里得点积,它作用于一对n维向量,其数学定义如下:
<u,v>=<(u1,...,un),(v1,...,vn)>:=i=1nuivi<\mathbf{u}, \mathbf{v}> = <(u_{1},…,u_{n}), (v_{1},…,v_{n})> := \sum_{i=1}^{n}u_{i}v_{i}

22.jpg

函数点积

和欧几里得点积一样,可以对两个函数计算点积(可以简单的把函数值域的每个数值理解为欧几里得向量的一个维度),来描述其函数的”相似性”:

<<f,g>>=01f(x)g(x)dx<<f, g>> = \int_{0}^{1}f(x)g(x)dx

23.jpg

参考

声明:本系列文章参考了Carnegie Mellon University Keenan Crane教授的教学讲义,感兴趣的同学可以油管观看原文视频.

© 版权声明
THE END
喜欢就支持一下吧
点赞0

Warning: mysqli_query(): (HY000/3): Error writing file '/tmp/MY3KA0az' (Errcode: 28 - No space left on device) in /www/wwwroot/583.cn/wp-includes/class-wpdb.php on line 2345
admin的头像-五八三
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

图形验证码
取消
昵称代码图片