Games101计算机图形学学习笔记:线性代数-向量

一、标量与向量

1、标量

只有大小,没有方向的数值即称为标量。比如:长度,面积,温度等。

2、向量

又称为矢量,既有大小又有方向的量。一个向量表示一个点指向另一个点的方向和长度。向量通常可以用一个字母并在字母上加→来表示,如: a ⃗ \vec{a} a 向量。
向量没有位置属性

1.向量的方向

上图描述一个有 点A 指向 点B 的向量 a ⃗ \boldsymbol{\vec{a}} a 。 在同一个坐标系内,任何 a ⃗ \boldsymbol{\vec{a}} a 方向和长度相等的向量都和向量 a ⃗ \boldsymbol{\vec{a}} a 相等。比如由 点A’ 指向 点B’ 的向量 A ′ ⃗ \boldsymbol{\vec{A'}} A 。用向量的终点减起点即可得到这个向量的值: a ⃗ \boldsymbol{\vec{a}} a = B - A

2.向量的长度

向量的长度也叫向量的模,可以用两组两条|包裹的向量名来表示,如: ∣ ∣ a ⃗ ∣ ∣ \boldsymbol{||\vec{a}||} ∣∣a ∣∣
还有一种比较特殊的向量叫单位向量,单位向量的意思是模长为1的向量。单位向量用向量名上面加一个尖尖的角来表示,如: a ^ \boldsymbol{\hat{a}} a^。 用向量除以他自己的模长即可得到他的单位向量,也叫归一化向量: a ^ = a ⃗ / ∣ ∣ a ⃗ ∣ ∣ \boldsymbol{\hat{a} = \vec{a} / ||\vec{a}||} a^=a /∣∣a ∣∣

在图形学中,我们关注一个方向通常都用单位向量,并不用关心它的长度

求模公式
∣ ∣ A ⃗ ∣ ∣ = x 2 + y 2 ||\vec{A}|| = \sqrt{x^2+y^2} ∣∣A ∣∣=x2+y2
这里我们还可以理解为一个向量为列矩阵乘以他的转置矩阵。
A ⃗ = ( x y ) \vec{A} = \begin{pmatrix} x \\ y \end{pmatrix} A =(xy)
A T = ( x y ) A^T = \begin{pmatrix}x&y\end{pmatrix} AT=(xy)

3.向量的计算

1.向量加法

向量加法
向量加法可以用两种方式来解释,分别是平行四边形法则和三角形法则。
左边的图是平行四边形法则:
两个向量合成时,以表示这两个向量的线段为邻边作平行四边形,这个平行四边形的对角线就表示合向量的大小和方向,这就叫做平行四边形定则
这里可以这样理解:因为向量在同一平面内可以随意移动而不会改变其值,我们可以把向量 a ⃗ \boldsymbol{\vec{a}} a 和向量 b ⃗ \boldsymbol{\vec{b}} b 的起点放在一起,然后再平移另一组向量 a ⃗ \boldsymbol{\vec{a}} a 和向量 b ⃗ \boldsymbol{\vec{b}} b 使得他们围城一个平行四边形。那么这个平行四边形的对角线就是向量 a ⃗ \boldsymbol{\vec{a}} a 和向量 b ⃗ \boldsymbol{\vec{b}} b 相加之和。

右边的图是三角形法则:
把向量 a ⃗ \boldsymbol{\vec{a}} a 和向量 b ⃗ \boldsymbol{\vec{b}} b 首尾相接,从向量 a ⃗ \boldsymbol{\vec{a}} a 的起点指向向量 b ⃗ \boldsymbol{\vec{b}} b 的终点的向量就是 a ⃗ \boldsymbol{\vec{a}} a + b ⃗ \boldsymbol{\vec{b}} b 的结果
这个不仅适用于两个向量,也可以用于多个向量。

2.向量的减法

向量减法
将两个向量平移至公共起点,减向量的终点指向被减向量的终点的向量即为结果。

3.向量的乘法
1.点乘

点乘

1.在图形学中我们经常使用点乘来计算两个向量的夹角,比如制作光照模型时计算光照和法线的夹角。

几何解释
a ⃗ ⋅ b ⃗ = ∣ ∣ a ⃗ ∣ ∣   ∣ ∣ b ⃗ ∣ ∣   c o s θ \boldsymbol{\vec{a} \cdot \vec{b} = ||\vec{a}|| \ ||\vec{b}|| \ cosθ} a b =∣∣a ∣∣ ∣∣b ∣∣ cosθ
两个向量点乘的结果是一个标量。
c o s θ = a ⃗ ⋅ b ⃗ ∣ ∣ a ⃗ ∣ ∣   ∣ ∣ b ⃗ ∣ ∣ \boldsymbol{cosθ = \frac{\vec{a} \cdot \vec{b}}{||\vec{a}|| \ ||\vec{b}||}} cosθ=∣∣a ∣∣ ∣∣b ∣∣a b
当两个向量都为单位向量时,公式可简化为
c o s θ = a ^ ⋅ b ^ \boldsymbol{cosθ = \hat{a} \cdot \hat{b}} cosθ=a^b^
代数解释
a ⃗ ⋅ b ⃗ = ( x a y a ) ⋅ ( x b y b ) = x a x b + y a y b \boldsymbol{\vec{a} \cdot \vec{b} = \begin{pmatrix}x_a \\ y_a \end{pmatrix} \cdot \begin{pmatrix}x_b \\ y_b \end{pmatrix} = x_ax_b + y_ay_b} a b =(xaya)(xbyb)=xaxb+yayb
a ⃗ ⋅ b ⃗ = ( x a y a z a ) ⋅ ( x b y b z b ) = x a x b + y a y b + z a z b \boldsymbol{\vec{a} \cdot \vec{b} = \begin{pmatrix}x_a \\ y_a \\ z_a\end{pmatrix} \cdot \begin{pmatrix}x_b \\ y_b \\ z_b \end{pmatrix} = x_ax_b + y_ay_b + z_az_b} a b = xayaza xbybzb =xaxb+yayb+zazb
向量的点乘满足交换律、结合律、分配率
a ⃗ ⋅ b ⃗ = b ⃗ ⋅ a ⃗ \boldsymbol{\vec{a} \cdot \vec{b} = \vec{b} \cdot \vec{a}} a b =b a
a ⃗ ⋅ ( b ⃗ + c ⃗ ) = a ⃗ ⋅ b ⃗ + a ⃗ ⋅ c ⃗ \boldsymbol{\vec{a} \cdot (\vec{b}+\vec{c}) = \vec{a} \cdot \vec{b} + \vec{a}\cdot \vec{c}} a (b +c )=a b +a c
( k a ⃗ ) ⋅ b ⃗ = a ⃗ ⋅ ( k b ⃗ ) = k ( a ⃗ ⋅ b ⃗ ) \boldsymbol{(k\vec{a}) \cdot \vec{b} = \vec{a} \cdot (k\vec{b}) = k(\vec{a} \cdot \vec{b})} (ka )b =a (kb )=k(a b )
如果两个向量的点乘为0则这两个向量互相垂直 a ⃗ ⋅ b ⃗ = 0 \boldsymbol{\vec{a} \cdot \vec{b} = 0} a b =0

2.另外点乘还有一个作用,就是计算一个向量在另一个向量上的投影。

投影
投影公式的推导过程如下
b ⃗ \boldsymbol{\vec{b}} b a ⃗ \boldsymbol{\vec{a}} a 上的投影是 b ⊥ ⃗ \boldsymbol{\vec{b_\perp}} b ,且两个向量的夹角是θ。因为 b ⊥ ⃗ \boldsymbol{\vec{b_\perp}} b a ⃗ \boldsymbol{\vec{a}} a 上的投影,所以 b ⊥ ⃗ \boldsymbol{\vec{b_\perp}} b 的方向和 a ⃗ \boldsymbol{\vec{a}} a 相同。可得:
投影值为长度d乘以单位向量 a ^ \hat{a} a^ (1)
a ^ = a ⃗ ∣ ∣ a ⃗ ∣ ∣ \hat{a}=\frac{\vec{a}}{||\vec{a}||} a^=∣∣a ∣∣a
b ⊥ ⃗ = d a ⃗ ∣ ∣ a ⃗ ∣ ∣ \vec{b_\perp}=d\frac{\vec{a}}{||\vec{a}||} b =d∣∣a ∣∣a
由三角函数可求出d的值 (2)
d = ∣ ∣ b ⃗ ∣ ∣ c o s θ d=||\vec{b}||cosθ d=∣∣b ∣∣cosθ
根据点乘公式可得 (3)
c o s θ = a ⃗ ⋅ b ⃗ ∣ ∣ a ⃗ ∣ ∣   ∣ ∣ b ⃗ ∣ ∣ cosθ = \frac{\vec{a} \cdot \vec{b}}{||\vec{a}|| \ ||\vec{b}||} cosθ=∣∣a ∣∣ ∣∣b ∣∣a b
投影长度:把3代入2
d = ∣ ∣ b ⃗ ∣ ∣ a ⃗ ⋅ b ⃗ ∣ ∣ a ⃗ ∣ ∣   ∣ ∣ b ⃗ ∣ ∣ = a ⃗ ⋅ b ⃗ ∣ ∣ a ⃗ ∣ ∣ d=||\vec{b}||\frac{\vec{a} \cdot \vec{b}}{||\vec{a}|| \ ||\vec{b}||}=\frac{\vec{a} \cdot \vec{b}}{||\vec{a}||} d=∣∣b ∣∣∣∣a ∣∣ ∣∣b ∣∣a b =∣∣a ∣∣a b
投影向量:把3代入2再,2再代入1,可得:
b ⊥ ⃗ = ∣ ∣ b ⃗ ∣ ∣ a ⃗ ⋅ b ⃗ ∣ ∣ a ⃗ ∣ ∣   ∣ ∣ b ⃗ ∣ ∣ a ⃗ ∣ ∣ a ⃗ ∣ ∣ = a ⃗ ⋅ b ⃗ ∣ ∣ a ⃗ ∣ ∣ 2 a ⃗ \vec{b_\perp}=||\vec{b}||\frac{\vec{a} \cdot \vec{b}}{||\vec{a}|| \ ||\vec{b}||}\frac{\vec{a}}{||\vec{a}||}=\frac{\vec{a} \cdot \vec{b}}{||\vec{a}||^2}\vec{a} b =∣∣b ∣∣∣∣a ∣∣ ∣∣b ∣∣a b ∣∣a ∣∣a =∣∣a 2a b a
求另一个直角边
得到向量 b ⃗ \vec{b} b 在向量 a ⃗ \vec{a} a 上的投影向量后,我们可根据向量减法求出另一条直角边所代表的的向量 b ⃗ − b ⃗ ⊥ \vec{b}-\vec{b}_\perp b b

3.通过点乘我们可以知道两个向量的是否指向同一方向

在这里插入图片描述
这里 a ⃗ \vec{a} a b ⃗ \vec{b} b 的点乘结果大于0,我们可知他们方向基本上是一致的。 a ⃗ \vec{a} a c ⃗ \vec{c} c 的点乘结果小于0则他们方向相反。如果点乘结果等于0则两个向量垂直。

4.我们可以通过点乘计算两个向量有多么接近

参考3。如果 a ⃗ \vec{a} a b ⃗ \vec{b} b 的点乘结果越接近1,则两个向越接近。越接近-1则两个向量越远离

2.叉乘

叉乘
几何解释
不同于点乘的结果是一个标量,叉乘的结果是一个向量。该向量同时垂直于两个相乘的向量所定义的平面。因为是一个向量所以有两个属性:一个是模长,一个是方向。模长的计算公式为:
∣ ∣ a ⃗ × b ⃗ ∣ ∣ = ∣ ∣ a ⃗ ∣ ∣ ∣ ∣ b ⃗ ∣ ∣ s i n θ ||\vec{a} \times \vec{b}|| = ||\vec{a}||||\vec{b}||sinθ ∣∣a ×b ∣∣=∣∣a ∣∣∣∣b ∣∣sinθ
方向则是由两个乘数决定的,根据右手螺旋定则,由乘数指向被乘数,拇指的方向即为叉乘结果的方向

1.作用主要用于方便我们建立一个三维空间的直角坐标系。

代数解释
a ⃗ × b ⃗ = ( y a z b − y b z a z a x b − x a z b x a y b − y a x b ) \boldsymbol{\vec{a} \times \vec{b} = \begin{pmatrix} y_az_b-y_bz_a \\ z_ax_b-x_az_b \\ x_ay_b-y_ax_b \end{pmatrix}} a ×b = yazbybzazaxbxazbxaybyaxb
另一种算法是把 a ⃗ \vec{a} a 写成矩阵的形式A
a ⃗ × b ⃗ = A ∗ b = ( 0 − z a y a z a 0 − x a − y a x a 0 ) ( x b y b z b ) \boldsymbol{\vec{a} \times \vec{b} = A*b= \begin{pmatrix} 0 & -z_a & y_a \\ z_a & 0 & -x_a \\ -y_a & x_a & 0 \end{pmatrix} \begin{pmatrix} x_b\\ y_b\\ z_b \end{pmatrix}} a ×b =Ab= 0zayaza0xayaxa0 xbybzb
向量的叉乘不满足交换律: a ⃗ × b ⃗ = − b ⃗ × a ⃗ \vec{a} \times \vec{b} = -\vec{b} \times \vec{a} a ×b =b ×a
一个向量和它自己的叉乘是 0 ⃗ \vec{0} 0 a ⃗ × a ⃗ = 0 ⃗ \vec{a} \times \vec{a} = \vec{0} a ×a =0 。因为一个向量与它自己的夹角是0,所以sinθ=0.
a ⃗ × ( b ⃗ + c ⃗ ) = a ⃗ × b ⃗ + a ⃗ × c ⃗ \vec{a} \times (\vec{b} + \vec{c}) = \vec{a} \times \vec{b} + \vec{a} \times \vec{c} a ×(b +c )=a ×b +a ×c
a ⃗ × ( k b ⃗ ) = k ( a ⃗ × b ⃗ ) \vec{a} \times (k \vec{b}) = k( \vec{a} \times \vec{b}) a ×(kb )=k(a ×b )

2.第二个作用:判断一个向量在另一个向量的左还是右在这里插入图片描述

根据右手螺旋定则,如果 a ⃗ \vec{a} a b ⃗ \vec{b} b 在xy平面内,他们两个的的叉乘结果如果是正值则证明 b ⃗ \vec{b} b a ⃗ \vec{a} a 的左侧,反之 b ⃗ \vec{b} b a ⃗ \vec{a} a 的右侧。

3.第三个作用:判断内外

在这里插入图片描述
分别用 A B ⃗ × A P ⃗ \vec{AB}\times\vec{AP} AB ×AP B C ⃗ × B P ⃗ \vec{BC}\times\vec{BP} BC ×BP C A ⃗ × C P ⃗ \vec{CA}\times\vec{CP} CA ×CP 得出每次P点都在左侧,即为在该区域内部

3.点乘和叉乘的共同应用:把一个向量分解到一个三维直角坐标系上

我们可以定义一个uvw的坐标系
∣ ∣ u ⃗ ∣ ∣ = ∣ ∣ v ⃗ ∣ ∣ = ∣ ∣ w ⃗ ∣ ∣ = 1 ||\vec{u}||=||\vec{v}||=||\vec{w}||=1 ∣∣u ∣∣=∣∣v ∣∣=∣∣w ∣∣=1他们三个长度都为1,即为单位向量
u ⃗ ⋅ v ⃗ = v ⃗ ⋅ w ⃗ = u ⃗ ⋅ w ⃗ = 0 \vec{u}\cdot\vec{v}=\vec{v}\cdot\vec{w}=\vec{u}\cdot\vec{w} = 0 u v =v w =u w =0三个向量互相垂直
w ⃗ = u ⃗ × v ⃗ \vec{w}=\vec{u}\times\vec{v} w =u ×v 叉乘结果等于第三个向量
这样我们就可以得到一个右手的三维直角坐标系。
然后我们把一个向量通过投影分解到这个直角坐标系上。
p ⃗ = ( p ⃗ ⋅ u ⃗ ) u ⃗ + ( p ⃗ ⋅ v ⃗ ) v ⃗ + ( p ⃗ ⋅ w ⃗ ) w ⃗ \vec{p}=(\vec{p}\cdot\vec{u})\vec{u}+(\vec{p}\cdot\vec{v})\vec{v}+(\vec{p}\cdot\vec{w})\vec{w} p =(p u )u +(p v )v +(p w )w
投影公式为两个向量的点乘,因为被投的向量是单位向量所以:
在u方向上的投影向量为: ∣ ∣ p ⃗ ∣ ∣   c o s θ   u ⃗ ||\vec{p}|| \ cosθ \ \vec{u} ∣∣p ∣∣ cosθ u
以此类推可以得到三个方向上的投影向量。即为分解之前的向量

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值