本课只解决一个问题 怎样只用数字计算方向、长度、夹角、投影和三角形面积?
这些量以后会分别变成切向量、度量、共形条件和网格面积。
1. 点和向量不是同一种对象 点表示位置,向量表示位移。若
p = ( 1 , 2 ) , q = ( 4 , 6 ) , p=(1,2),\qquad q=(4,6), p = ( 1 , 2 ) , q = ( 4 , 6 ) ,
那么从p p p 指向q q q 的向量是
v = q − p = ( 3 , 4 ) . v=q-p=(3,4). v = q − p = ( 3 , 4 ) .
把向量加到点上得到新点:p + v = q p+v=q p + v = q 。两个点相加通常没有天然几何意义,但两个位移可以相加。
2. 向量加法与数乘 设a = ( a 1 , a 2 ) a=(a_1,a_2) a = ( a 1 , a 2 ) 、b = ( b 1 , b 2 ) b=(b_1,b_2) b = ( b 1 , b 2 ) :
a + b = ( a 1 + b 1 , a 2 + b 2 ) , a+b=(a_1+b_1,a_2+b_2), a + b = ( a 1 + b 1 , a 2 + b 2 ) ,
λ a = ( λ a 1 , λ a 2 ) . \lambda a=(\lambda a_1,\lambda a_2). λa = ( λ a 1 , λ a 2 ) .
λ > 1 \lambda>1 λ > 1 拉长,0 < λ < 1 0<\lambda<1 0 < λ < 1 缩短,λ < 0 \lambda<0 λ < 0 还会反向。
线段上从p p p 到q q q 的点可以写成
( 1 − t ) p + t q , 0 ≤ t ≤ 1. (1-t)p+tq,\qquad 0\le t\le1. ( 1 − t ) p + tq , 0 ≤ t ≤ 1.
系数之和为1 1 1 ,所以它与坐标原点的选择无关。这类组合叫仿射组合。
3. 长度来自平方和 二维向量v = ( v 1 , v 2 ) v=(v_1,v_2) v = ( v 1 , v 2 ) 的欧氏长度为
∥ v ∥ = v 1 2 + v 2 2 . \|v\|=\sqrt{v_1^2+v_2^2}. ∥ v ∥ = v 1 2 + v 2 2 .
它就是勾股定理。上例v = ( 3 , 4 ) v=(3,4) v = ( 3 , 4 ) :
∥ v ∥ = 3 2 + 4 2 = 5. \|v\|=\sqrt{3^2+4^2}=5. ∥ v ∥ = 3 2 + 4 2 = 5.
两点距离定义为位移长度:
d ( p , q ) = ∥ q − p ∥ . d(p,q)=\|q-p\|. d ( p , q ) = ∥ q − p ∥.
4. 内积同时编码长度和角度 定义
a ⋅ b = a 1 b 1 + a 2 b 2 . a\cdot b=a_1b_1+a_2b_2. a ⋅ b = a 1 b 1 + a 2 b 2 .
把向量与自身做内积:
a ⋅ a = a 1 2 + a 2 2 = ∥ a ∥ 2 . a\cdot a=a_1^2+a_2^2=\|a\|^2. a ⋅ a = a 1 2 + a 2 2 = ∥ a ∥ 2 .
内积与夹角的关系是
a ⋅ b = ∥ a ∥ ∥ b ∥ cos θ . a\cdot b=\|a\|\|b\|\cos\theta. a ⋅ b = ∥ a ∥∥ b ∥ cos θ .
从余弦定理推导 三角形三边可以取a , b , a − b a,b,a-b a , b , a − b 。余弦定理给出
∥ a − b ∥ 2 = ∥ a ∥ 2 + ∥ b ∥ 2 − 2 ∥ a ∥ ∥ b ∥ cos θ . \|a-b\|^2=\|a\|^2+\|b\|^2-2\|a\|\|b\|\cos\theta. ∥ a − b ∥ 2 = ∥ a ∥ 2 + ∥ b ∥ 2 − 2∥ a ∥∥ b ∥ cos θ .
另一方面直接展开:
∥ a − b ∥ 2 = ( a − b ) ⋅ ( a − b ) = a ⋅ a − 2 a ⋅ b + b ⋅ b = ∥ a ∥ 2 − 2 a ⋅ b + ∥ b ∥ 2 . \begin{aligned} \|a-b\|^2 &=(a-b)\cdot(a-b)\\ &=a\cdot a-2a\cdot b+b\cdot b\\ &=\|a\|^2-2a\cdot b+\|b\|^2. \end{aligned} ∥ a − b ∥ 2 = ( a − b ) ⋅ ( a − b ) = a ⋅ a − 2 a ⋅ b + b ⋅ b = ∥ a ∥ 2 − 2 a ⋅ b + ∥ b ∥ 2 .
比较两式,得到内积公式。
5. 正交与投影 若a ⋅ b = 0 a\cdot b=0 a ⋅ b = 0 ,且两者非零,则cos θ = 0 \cos\theta=0 cos θ = 0 ,所以a , b a,b a , b 垂直。
把v v v 投影到非零方向a a a 上:
proj a ( v ) = v ⋅ a a ⋅ a a . \operatorname{proj}_a(v) =\frac{v\cdot a}{a\cdot a}a. proj a ( v ) = a ⋅ a v ⋅ a a .
以v = ( 3 , 4 ) v=(3,4) v = ( 3 , 4 ) 、a = ( 1 , 0 ) a=(1,0) a = ( 1 , 0 ) 为例:
proj a ( v ) = 3 ( 1 , 0 ) = ( 3 , 0 ) . \operatorname{proj}_a(v)=3(1,0)=(3,0). proj a ( v ) = 3 ( 1 , 0 ) = ( 3 , 0 ) .
余量( 0 , 4 ) (0,4) ( 0 , 4 ) 与a a a 垂直。最小二乘法和切空间分解都在重复这一思想。
6. 三维叉积与面积 三维向量a , b a,b a , b 的叉积a × b a\times b a × b 同时垂直于二者,长度为
∥ a × b ∥ = ∥ a ∥ ∥ b ∥ sin θ . \|a\times b\|=\|a\|\|b\|\sin\theta. ∥ a × b ∥ = ∥ a ∥∥ b ∥ sin θ .
这等于由a , b a,b a , b 张成的平行四边形面积,所以三角形面积为
A = 1 2 ∥ a × b ∥ . A=\frac12\|a\times b\|. A = 2 1 ∥ a × b ∥.
三角网格中,取a = p 1 − p 0 a=p_1-p_0 a = p 1 − p 0 、b = p 2 − p 0 b=p_2-p_0 b = p 2 − p 0 即可计算面法向与面积。
7. 手算例子 设a = ( 1 , 2 ) a=(1,2) a = ( 1 , 2 ) 、b = ( 2 , − 1 ) b=(2,-1) b = ( 2 , − 1 ) :
a ⋅ b = 1 ⋅ 2 + 2 ⋅ ( − 1 ) = 0. a\cdot b=1\cdot2+2\cdot(-1)=0. a ⋅ b = 1 ⋅ 2 + 2 ⋅ ( − 1 ) = 0.
所以它们垂直。长度都为5 \sqrt5 5 。虽然坐标看起来不“横平竖直”,内积仍能识别正交。
8. 共形映射为什么关心内积 若线性映射A A A 把任意向量长度统一乘以λ \lambda λ ,并保持夹角,那么
( A a ) ⋅ ( A b ) = λ 2 ( a ⋅ b ) . (Aa)\cdot(Ab)=\lambda^2(a\cdot b). ( A a ) ⋅ ( A b ) = λ 2 ( a ⋅ b ) .
用矩阵写就是
A T A = λ 2 I . A^TA=\lambda^2I. A T A = λ 2 I .
这将成为线性映射保角的精确判据。
9. 最小代码实验 import numpy as np
a = np. array( [ 1.0 , 2.0 ] )
b = np. array( [ 2.0 , - 1.0 ] )
dot = a @ b
angle = np. arccos( np. clip( dot / ( np. linalg. norm( a) * np. linalg. norm( b) ) , - 1 , 1 ) )
print ( dot)
print ( np. degrees( angle) ) 10. 常见误区 坐标是数组,不代表所有数组都可以当点和向量混用。 a ⋅ b a\cdot b a ⋅ b 是标量;a × b a\times b a × b 在三维中是向量。两个零向量的夹角没有定义,因为公式分母为零。 法向方向依赖三角形顶点顺序,交换两个顶点会反向。 11. 自测与答案 题 1。 p = ( 1 , 1 ) p=(1,1) p = ( 1 , 1 ) 、q = ( 4 , 5 ) q=(4,5) q = ( 4 , 5 ) ,求距离。
答案。 q − p = ( 3 , 4 ) q-p=(3,4) q − p = ( 3 , 4 ) ,距离为5 5 5 。
题 2。 ( 1 , 1 ) (1,1) ( 1 , 1 ) 在( 1 , 0 ) (1,0) ( 1 , 0 ) 上的投影是什么?
答案。 ( 1 , 0 ) (1,0) ( 1 , 0 ) 。
题 3。 为什么a ⋅ b = 0 a\cdot b=0 a ⋅ b = 0 能说明非零向量垂直?
答案。 因为a ⋅ b = ∥ a ∥ ∥ b ∥ cos θ a\cdot b=\|a\|\|b\|\cos\theta a ⋅ b = ∥ a ∥∥ b ∥ cos θ ,非零长度使cos θ = 0 \cos\theta=0 cos θ = 0 ,故θ = π / 2 \theta=\pi/2 θ = π /2 。
前后课程 上一课:角度与三角函数 | 下一课:矩阵是线性映射