目标
对于游戏行业程序员来说,向量“点乘”和“叉乘”是非常熟悉的运算。从代码上看他们运算过程并不复杂:(以下代码选自UE4的“Vector.h”)
点乘就是各分量逐项相乘,最终得到了一个标量:
FORCEINLINE float FVector::DotProduct(const FVector& A, const FVector& B)
{
return X*V.X + Y*V.Y + Z*V.Z;
}
叉乘最终得到一个新的向量,虽然其运算现在看起来略显“奇怪”(不过,在随后的证明中可以看出其重要的几何意义):
FORCEINLINE FVector FVector::CrossProduct(const FVector& A, const FVector& B)
{
return FVector
(
Y * V.Z - Z * V.Y,
Z * V.X - X * V.Z,
X * V.Y - Y * V.X
);
}
即:
a
⃗
⋅
b
⃗
=
x
a
x
b
+
y
a
y
b
+
z
a
z
b
\vec{a}\cdot\vec{b} = x_ax_b+y_ay_b+z_az_b
a⋅b=xaxb+yayb+zazb
a ⃗ × b ⃗ = ( y a z b − z a y b , z a x b − x a z b , x a y b − y a x b ) \vec{a}\times\vec{b} = (y_az_b-z_ay_b,z_ax_b-x_az_b,x_ay_b-y_ax_b) a×b=(yazb−zayb,zaxb−xazb,xayb−yaxb)
他们各自都有重要的几何意义,经常会出现在有关空间计算的逻辑中,例如:
- 标准化后向量点乘得到的值为夹角的余弦。这样,只要计算点乘,得到
-1
~0
~1
,便可知道两个向量之间方向的关系是相反
~垂直
~相同
。 - 向量叉乘后得到的新向量一定和原先两个向量垂直。
- 向量叉乘后得到的向量的模,其值为两个向量构成的三角形的面积的二倍。
向量点乘和叉乘的这些特性经常被使用,但是对于其中的数学原理我是模糊不清的,因此我想自己动手证明一下。
而为了让这些证明得更容易,我还需要在此之前证明其基于的一些定理。
1. 证明:勾股定理
定理:
对于一个直角三角形ABC,其中直角为∠BAC,有:
B
C
2
=
A
B
2
+
A
C
2
BC^2=AB^2+AC^2
BC2=AB2+AC2
其证明网上有很多种,下面的方法据说来自于欧几里得的《几何原本》。
(图片来源勾股定理_百度百科)
由于 三角形FBC 和正方形GFBA 同底等高,所以有:
S
F
B
C
×
2
=
S
G
F
B
A
S_{FBC}\times2=S_{GFBA}
SFBC×2=SGFBA
由于 三角形FBC 和 三角形ABD 为全等三角形,所以有:
S
F
B
C
=
S
A
B
D
S_{FBC}=S_{ABD}
SFBC=SABD
由于 三角形ABD 和矩形BDLK 同底等高,所以有:
S
A
B
D
×
2
=
S
B
D
L
K
S_{ABD}\times2=S_{BDLK}
SABD×2=SBDLK
因此:
S
G
F
B
A
=
S
F
B
C
×
2
=
S
A
B
D
×
2
=
S
B
D
L
K
S_{GFBA}=S_{FBC}\times2=S_{ABD}\times2=S_{BDLK}
SGFBA=SFBC×2=SABD×2=SBDLK
同理:
S
A
C
I
H
=
S
K
L
E
C
S_{ACIH}=S_{KLEC}
SACIH=SKLEC
(即图中粉色正方形的面积等于粉色矩形的面积,蓝色正方形的面积等于蓝色矩形的面积)
因此:
B
C
2
=
S
B
D
E
C
=
S
B
D
L
K
+
S
K
L
E
C
=
S
G
F
B
A
+
S
A
C
I
H
=
A
B
2
+
A
C
2
\begin{aligned} BC^2 & =S_{BDEC}\\ & =S_{BDLK}+S_{KLEC}\\ & =S_{GFBA}+S_{ACIH}\\ & = AB^2+AC^2\\ \end{aligned}
BC2=SBDEC=SBDLK+SKLEC=SGFBA+SACIH=AB2+AC2
2. 证明:余弦定理
定理:
对于任意一个三角形ABC,有:
A
B
2
=
B
C
2
+
A
C
2
−
2
B
C
⋅
A
C
⋅
c
o
s
C
AB^2=BC^2+AC^2-2BC \cdot AC \cdot cosC
AB2=BC2+AC2−2BC⋅AC⋅cosC
证明网上也有很多种,下面的方法据说也来自于欧几里得的《几何原本》。
在直角三角形ADC中,有:
A
D
=
A
C
⋅
s
i
n
C
AD = AC \cdot sinC
AD=AC⋅sinC
C D = A C ⋅ c o s C CD = AC \cdot cosC CD=AC⋅cosC
在CB边上,有:
D
B
=
B
C
−
C
D
=
B
C
−
A
C
⋅
c
o
s
C
DB= BC-CD=BC- AC \cdot cosC
DB=BC−CD=BC−AC⋅cosC
在直角三角形ADB中,由勾股定理可得:
A
B
2
=
A
D
2
+
D
B
2
=
(
A
C
⋅
s
i
n
C
)
2
+
(
B
C
−
A
C
⋅
c
o
s
C
)
2
=
A
C
2
⋅
s
i
n
C
2
+
B
C
2
+
A
C
2
⋅
c
o
s
C
2
−
2
B
C
⋅
A
C
⋅
c
o
s
C
=
B
C
2
+
A
C
2
⋅
s
i
n
C
2
+
A
C
2
⋅
c
o
s
C
2
−
2
B
C
⋅
A
C
⋅
c
o
s
C
=
B
C
2
+
A
C
2
(
s
i
n
C
2
+
c
o
s
C
2
)
−
2
B
C
⋅
A
C
⋅
c
o
s
C
=
B
C
2
+
A
C
2
−
2
B
C
⋅
A
C
⋅
c
o
s
C
\begin{aligned} AB^2 & =AD^2+DB^2\\ & =(AC \cdot sinC)^2+(BC- AC \cdot cosC)^2\\ & =AC^2\cdot sinC^2+BC^2+AC^2\cdot cosC^2-2BC \cdot AC \cdot cosC\\ & =BC^2+AC^2\cdot sinC^2+AC^2\cdot cosC^2-2BC \cdot AC \cdot cosC\\ & =BC^2+AC^2(sinC^2+cosC^2)-2BC \cdot AC \cdot cosC\\ & =BC^2+AC^2-2BC \cdot AC \cdot cosC\\ \end{aligned}
AB2=AD2+DB2=(AC⋅sinC)2+(BC−AC⋅cosC)2=AC2⋅sinC2+BC2+AC2⋅cosC2−2BC⋅AC⋅cosC=BC2+AC2⋅sinC2+AC2⋅cosC2−2BC⋅AC⋅cosC=BC2+AC2(sinC2+cosC2)−2BC⋅AC⋅cosC=BC2+AC2−2BC⋅AC⋅cosC
3. 证明:向量点乘的几何意义——结果为模相乘再乘夹角余弦
向量点乘的定义如下:
a
⃗
⋅
b
⃗
=
x
a
x
b
+
y
a
y
b
+
z
a
z
b
\vec{a}\cdot\vec{b} = x_ax_b+y_ay_b+z_az_b
a⋅b=xaxb+yayb+zazb
现在想证明的是:(其中θ为两向量夹角)
a
⃗
⋅
b
⃗
=
∥
a
⃗
∥
⋅
∥
b
⃗
∥
c
o
s
θ
\vec{a}\cdot\vec{b} =\left \| \vec{a} \right \|\cdot\left \| \vec{b} \right \|cos\theta
a⋅b=∥a∥⋅∥∥∥b∥∥∥cosθ
在证明前,先看一个算不上是“定理”的结论:
对于一个2维的向量(x,y)
,由于坐标系是垂直的,所以由勾股定理很容易能推导出
2
维
向
量
长
度
2
=
x
2
+
y
2
2维向量长度^2=x^2+y^2
2维向量长度2=x2+y2
对于一个3维的向量(x,y,z)
,也可以很容易能推导出:
3
维
向
量
长
度
2
=
x
2
+
y
2
+
z
2
3维向量长度^2=x^2+y^2+z^2
3维向量长度2=x2+y2+z2
下面正式开始证明:
如果将向量a
和向量b
的起点放在一起,那么这两个向量终点之间的向量即为 a-b
。
而根据余弦定理,有:
∥
a
⃗
−
b
⃗
∥
2
=
∥
a
⃗
∥
2
+
∥
b
⃗
∥
2
−
2
∥
a
⃗
∥
⋅
∥
b
⃗
∥
c
o
s
θ
\left \| \vec{a} -\vec{b} \right \|^2=\left \| \vec{a} \right \|^2 +\left \| \vec{b} \right \|^2 -2\left \| \vec{a} \right \|\cdot\left \| \vec{b} \right \|cos\theta
∥∥∥a−b∥∥∥2=∥a∥2+∥∥∥b∥∥∥2−2∥a∥⋅∥∥∥b∥∥∥cosθ
写成分量的形式,就是:
(
(
x
a
,
y
a
,
z
a
)
−
(
x
b
,
y
b
,
z
b
)
)
2
=
(
x
a
,
y
a
,
z
a
)
2
+
(
x
b
,
y
b
,
z
b
)
2
−
2
∥
a
⃗
∥
⋅
∥
b
⃗
∥
c
o
s
θ
((x_a,y_a,z_a)-(x_b,y_b,z_b))^2=(x_a,y_a,z_a)^2+(x_b,y_b,z_b)^2-2\left \| \vec{a} \right \|\cdot\left \| \vec{b} \right \|cos\theta
((xa,ya,za)−(xb,yb,zb))2=(xa,ya,za)2+(xb,yb,zb)2−2∥a∥⋅∥∥∥b∥∥∥cosθ
向量相减即各分量相减,即:
(
x
a
−
x
b
,
y
a
−
y
b
,
z
a
−
z
b
)
2
=
(
x
a
,
y
a
,
z
a
)
2
+
(
x
b
,
y
b
,
z
b
)
2
−
2
∥
a
⃗
∥
⋅
∥
b
⃗
∥
c
o
s
θ
(x_a-x_b,y_a-y_b,z_a-z_b)^2=(x_a,y_a,z_a)^2+(x_b,y_b,z_b)^2-2\left \| \vec{a} \right \|\cdot\left \| \vec{b} \right \|cos\theta
(xa−xb,ya−yb,za−zb)2=(xa,ya,za)2+(xb,yb,zb)2−2∥a∥⋅∥∥∥b∥∥∥cosθ
将平方的运算展开:
x
a
2
+
x
b
2
−
2
x
a
x
b
+
y
a
2
+
y
b
2
−
2
y
a
y
b
+
z
a
2
+
z
b
2
−
2
z
a
z
b
=
x
a
2
+
x
b
2
+
y
a
2
+
y
b
2
+
z
a
2
+
z
b
2
−
2
∥
a
⃗
∥
⋅
∥
b
⃗
∥
c
o
s
θ
x_a^2+x_b^2-2x_ax_b+y_a^2+y_b^2-2y_ay_b+z_a^2+z_b^2-2z_az_b=x_a^2+x_b^2+y_a^2+y_b^2+z_a^2+z_b^2-2\left \| \vec{a} \right \|\cdot\left \| \vec{b} \right \|cos\theta
xa2+xb2−2xaxb+ya2+yb2−2yayb+za2+zb2−2zazb=xa2+xb2+ya2+yb2+za2+zb2−2∥a∥⋅∥∥∥b∥∥∥cosθ
去掉等式两边重复项可得:
−
2
x
a
x
b
−
2
y
a
y
b
−
2
z
a
z
b
=
−
2
∥
a
⃗
∥
⋅
∥
b
⃗
∥
c
o
s
θ
-2x_ax_b-2y_ay_b-2z_az_b=-2\left \| \vec{a} \right \|\cdot\left \| \vec{b} \right \|cos\theta
−2xaxb−2yayb−2zazb=−2∥a∥⋅∥∥∥b∥∥∥cosθ
约去-2
得:
x
a
x
b
+
y
a
y
b
+
z
a
z
b
=
∥
a
⃗
∥
⋅
∥
b
⃗
∥
c
o
s
θ
x_ax_b+y_ay_b+z_az_b=\left \| \vec{a} \right \|\cdot\left \| \vec{b} \right \|cos\theta
xaxb+yayb+zazb=∥a∥⋅∥∥∥b∥∥∥cosθ
结合向量点乘的定义,则最后可知:
a
⃗
⋅
b
⃗
=
x
a
x
b
+
y
a
y
b
+
z
a
z
b
=
∥
a
⃗
∥
⋅
∥
b
⃗
∥
c
o
s
θ
\begin{aligned} \vec{a}\cdot\vec{b} & =x_ax_b+y_ay_b+z_az_b \\ & =\left \| \vec{a} \right \|\cdot\left \| \vec{b} \right \|cos\theta \\ \end{aligned}
a⋅b=xaxb+yayb+zazb=∥a∥⋅∥∥∥b∥∥∥cosθ
4. 证明:向量叉乘的几何意义——结果与原先两个向量都垂直
向量叉乘的定义如下:
a
⃗
×
b
⃗
=
(
y
a
z
b
−
z
a
y
b
,
z
a
x
b
−
x
a
z
b
,
x
a
y
b
−
y
a
x
b
)
\vec{a}\times\vec{b} = (y_az_b-z_ay_b,z_ax_b-x_az_b,x_ay_b-y_ax_b)
a×b=(yazb−zayb,zaxb−xazb,xayb−yaxb)
由前面证明的向量点乘的几何意义可知,
如果能证明:
( a ⃗ × b ⃗ ) ⋅ a ⃗ = 0 (\vec{a}\times\vec{b} )\cdot \vec{a}=0 (a×b)⋅a=0
( a ⃗ × b ⃗ ) ⋅ b ⃗ = 0 (\vec{a}\times\vec{b} )\cdot \vec{b}=0 (a×b)⋅b=0
则意味着向量叉乘的结果向量,和原先两个向量的夹角的余弦值都为0,即夹角为90°,即与原先两个向量都垂直
而这个证明可以直接从算式中得出:
(
a
⃗
×
b
⃗
)
⋅
a
⃗
=
(
y
a
z
b
−
z
a
y
b
,
z
a
x
b
−
x
a
z
b
,
x
a
y
b
−
y
a
x
b
)
⋅
(
x
a
,
y
a
,
z
a
)
=
y
a
z
b
x
a
−
z
a
y
b
x
a
+
z
a
x
b
y
a
−
x
a
z
b
y
a
+
x
a
y
b
z
a
−
y
a
x
b
z
a
=
(
y
a
z
b
x
a
−
x
a
z
b
y
a
)
+
(
x
a
y
b
z
a
−
z
a
y
b
x
a
)
+
(
z
a
x
b
y
a
−
y
a
x
b
z
a
)
=
0
+
0
+
0
=
0
\begin{aligned} (\vec{a}\times\vec{b} )\cdot \vec{a} & = (y_az_b-z_ay_b,z_ax_b-x_az_b,x_ay_b-y_ax_b) \cdot (x_a,y_a,z_a) \\ & =y_az_bx_a-z_ay_bx_a+z_ax_by_a-x_az_by_a+x_ay_bz_a-y_ax_bz_a\\ & =(y_az_bx_a-x_az_by_a)+(x_ay_bz_a-z_ay_bx_a)+(z_ax_by_a-y_ax_bz_a)\\ & =0+0+0\\ & =0\\ \end{aligned}
(a×b)⋅a=(yazb−zayb,zaxb−xazb,xayb−yaxb)⋅(xa,ya,za)=yazbxa−zaybxa+zaxbya−xazbya+xaybza−yaxbza=(yazbxa−xazbya)+(xaybza−zaybxa)+(zaxbya−yaxbza)=0+0+0=0
( a ⃗ × b ⃗ ) ⋅ b ⃗ = ( y a z b − z a y b , z a x b − x a z b , x a y b − y a x b ) ⋅ ( x b , y b , z b ) = y a z b x b − z a y b x b + z a x b y b − x a z b y b + x a y b z b − y a x b z b = ( y a z b x b − y a x b z b ) + ( z a x b y b − z a y b x b ) + ( x a y b z b − x a z b y b ) = 0 + 0 + 0 = 0 \begin{aligned} (\vec{a}\times\vec{b} )\cdot \vec{b} & = (y_az_b-z_ay_b,z_ax_b-x_az_b,x_ay_b-y_ax_b) \cdot (x_b,y_b,z_b) \\ & =y_az_bx_b-z_ay_bx_b+z_ax_by_b-x_az_by_b+x_ay_bz_b-y_ax_bz_b\\ & =(y_az_bx_b-y_ax_bz_b)+(z_ax_by_b-z_ay_bx_b)+(x_ay_bz_b-x_az_by_b)\\ & =0+0+0\\ & =0\\ \end{aligned} (a×b)⋅b=(yazb−zayb,zaxb−xazb,xayb−yaxb)⋅(xb,yb,zb)=yazbxb−zaybxb+zaxbyb−xazbyb+xaybzb−yaxbzb=(yazbxb−yaxbzb)+(zaxbyb−zaybxb)+(xaybzb−xazbyb)=0+0+0=0
5. 证明:向量叉乘的几何意义——结果的模为原先两向量的模相乘再乘夹角正弦
向量叉乘的定义如下:
a
⃗
×
b
⃗
=
(
y
a
z
b
−
z
a
y
b
,
z
a
x
b
−
x
a
z
b
,
x
a
y
b
−
y
a
x
b
)
\vec{a}\times\vec{b} = (y_az_b-z_ay_b,z_ax_b-x_az_b,x_ay_b-y_ax_b)
a×b=(yazb−zayb,zaxb−xazb,xayb−yaxb)
现在想证明的是:(其中θ为两向量夹角)
∥
a
⃗
×
b
⃗
∥
=
∥
a
⃗
∥
∥
b
⃗
∥
s
i
n
θ
\left \|\vec{a}\times\vec{b}\right \| =\left \| \vec{a} \right \|\left \| \vec{b} \right \|sin\theta
∥∥∥a×b∥∥∥=∥a∥∥∥∥b∥∥∥sinθ
(方法来自于《3D游戏与计算机图形学中的数学方法》)
取向量叉乘结果的平方,逐步展开:
∥
a
⃗
×
b
⃗
∥
2
=
(
y
a
z
b
−
z
a
y
b
,
z
a
x
b
−
x
a
z
b
,
x
a
y
b
−
y
a
x
b
)
2
=
(
y
a
z
b
−
z
a
y
b
)
2
+
(
z
a
x
b
−
x
a
z
b
)
2
+
(
x
a
y
b
−
y
a
x
b
)
2
=
(
y
a
2
z
b
2
+
z
a
2
y
b
2
−
2
y
a
z
b
z
a
y
b
)
+
(
z
a
2
x
b
2
+
x
a
2
z
b
2
−
2
z
a
x
b
x
a
z
b
)
+
(
x
a
2
y
b
2
+
y
a
2
x
b
2
−
2
x
a
y
b
y
a
x
b
)
=
(
y
a
2
z
b
2
+
z
a
2
y
b
2
+
z
a
2
x
b
2
+
x
a
2
z
b
2
+
x
a
2
y
b
2
+
y
a
2
x
b
2
)
+
(
−
2
y
a
z
b
z
a
y
b
−
2
z
a
x
b
x
a
z
b
−
2
x
a
y
b
y
a
x
b
)
\begin{aligned} \left \|\vec{a}\times\vec{b}\right \| ^2 & = (y_az_b-z_ay_b,z_ax_b-x_az_b,x_ay_b-y_ax_b)^2 \\ & = (y_az_b-z_ay_b)^2+(z_ax_b-x_az_b)^2+(x_ay_b-y_ax_b)^2 \\ & = (y_a^2z_b^2+z_a^2y_b^2-2y_az_bz_ay_b)+(z_a^2x_b^2+x_a^2z_b^2-2z_ax_bx_az_b)+(x_a^2y_b^2+y_a^2x_b^2-2x_ay_by_ax_b) \\ & = (y_a^2z_b^2+z_a^2y_b^2+z_a^2x_b^2+x_a^2z_b^2+x_a^2y_b^2+y_a^2x_b^2)+(-2y_az_bz_ay_b-2z_ax_bx_az_b-2x_ay_by_ax_b)\\ \end{aligned}
∥∥∥a×b∥∥∥2=(yazb−zayb,zaxb−xazb,xayb−yaxb)2=(yazb−zayb)2+(zaxb−xazb)2+(xayb−yaxb)2=(ya2zb2+za2yb2−2yazbzayb)+(za2xb2+xa2zb2−2zaxbxazb)+(xa2yb2+ya2xb2−2xaybyaxb)=(ya2zb2+za2yb2+za2xb2+xa2zb2+xa2yb2+ya2xb2)+(−2yazbzayb−2zaxbxazb−2xaybyaxb)
下面便出现了我觉得这种证明方法比较“魔法”的一个操作,对于等号右侧:
左部分先加上了
(
x
a
2
x
b
2
+
y
a
2
y
b
2
+
z
a
2
z
b
2
)
(x_a^2x_b^2+y_a^2y_b^2+z_a^2z_b^2)
(xa2xb2+ya2yb2+za2zb2),右部分再减去它。一番“折腾”之后,虽然结果未受影响,但是却让左部分凑出了原先两向量的模
的形式,右部分凑出了向量点乘
的形式,具体来看:
∥
a
⃗
×
b
⃗
∥
2
=
(
y
a
2
z
b
2
+
z
a
2
y
b
2
+
z
a
2
x
b
2
+
x
a
2
z
b
2
+
x
a
2
y
b
2
+
y
a
2
x
b
2
)
+
(
x
a
2
x
b
2
+
y
a
2
y
b
2
+
z
a
2
z
b
2
)
+
(
−
2
y
a
z
b
z
a
y
b
−
2
z
a
x
b
x
a
z
b
−
2
x
a
y
b
y
a
x
b
)
−
(
x
a
2
x
b
2
+
y
a
2
y
b
2
+
z
a
2
z
b
2
)
=
(
y
a
2
z
b
2
+
z
a
2
y
b
2
+
z
a
2
x
b
2
+
x
a
2
z
b
2
+
x
a
2
y
b
2
+
y
a
2
x
b
2
+
x
a
2
x
b
2
+
y
a
2
y
b
2
+
z
a
2
z
b
2
)
−
(
x
a
2
x
b
2
+
y
a
2
y
b
2
+
z
a
2
z
b
2
+
2
y
a
z
b
z
a
y
b
+
2
z
a
x
b
x
a
z
b
+
2
x
a
y
b
y
a
x
b
)
=
(
x
a
2
+
y
a
2
+
z
a
2
)
(
x
b
2
+
y
b
2
+
z
b
2
)
−
(
x
a
x
b
+
y
a
y
b
+
z
a
z
b
)
2
=
∥
a
⃗
∥
2
∥
b
⃗
∥
2
−
(
a
⃗
⋅
b
⃗
)
2
\begin{aligned} \left \|\vec{a}\times\vec{b}\right \| ^2 & = (y_a^2z_b^2+z_a^2y_b^2+z_a^2x_b^2+x_a^2z_b^2+x_a^2y_b^2+y_a^2x_b^2)+(x_a^2x_b^2+y_a^2y_b^2+z_a^2z_b^2)+(-2y_az_bz_ay_b-2z_ax_bx_az_b-2x_ay_by_ax_b)-(x_a^2x_b^2+y_a^2y_b^2+z_a^2z_b^2)\\ & = (y_a^2z_b^2+z_a^2y_b^2+z_a^2x_b^2+x_a^2z_b^2+x_a^2y_b^2+y_a^2x_b^2+x_a^2x_b^2+y_a^2y_b^2+z_a^2z_b^2)-(x_a^2x_b^2+y_a^2y_b^2+z_a^2z_b^2+2y_az_bz_ay_b+2z_ax_bx_az_b+2x_ay_by_ax_b)\\ & = (x_a^2+y_a^2+z_a^2)(x_b^2+y_b^2+z_b^2)-(x_ax_b+y_ay_b+z_az_b)^2\\ & =\left \| \vec{a} \right \|^2\left \| \vec{b} \right \|^2-(\vec{a}\cdot\vec{b})^2\\ \end{aligned}
∥∥∥a×b∥∥∥2=(ya2zb2+za2yb2+za2xb2+xa2zb2+xa2yb2+ya2xb2)+(xa2xb2+ya2yb2+za2zb2)+(−2yazbzayb−2zaxbxazb−2xaybyaxb)−(xa2xb2+ya2yb2+za2zb2)=(ya2zb2+za2yb2+za2xb2+xa2zb2+xa2yb2+ya2xb2+xa2xb2+ya2yb2+za2zb2)−(xa2xb2+ya2yb2+za2zb2+2yazbzayb+2zaxbxazb+2xaybyaxb)=(xa2+ya2+za2)(xb2+yb2+zb2)−(xaxb+yayb+zazb)2=∥a∥2∥∥∥b∥∥∥2−(a⋅b)2
而根据前面证明的向量点乘的几何意义可知:
a
⃗
⋅
b
⃗
=
∥
a
⃗
∥
⋅
∥
b
⃗
∥
c
o
s
θ
\vec{a}\cdot\vec{b} =\left \| \vec{a} \right \|\cdot\left \| \vec{b} \right \|cos\theta
a⋅b=∥a∥⋅∥∥∥b∥∥∥cosθ
所以:
∥
a
⃗
×
b
⃗
∥
2
=
∥
a
⃗
∥
2
∥
b
⃗
∥
2
−
∥
a
⃗
∥
2
∥
b
⃗
∥
2
⋅
(
c
o
s
θ
)
2
=
∥
a
⃗
∥
2
∥
b
⃗
∥
2
⋅
(
1
−
(
c
o
s
θ
)
2
)
\begin{aligned} \left \|\vec{a}\times\vec{b}\right \| ^2 & = \left \| \vec{a} \right \|^2\left \| \vec{b} \right \|^2-\left \| \vec{a} \right \|^2\left \| \vec{b} \right \|^2\cdot (cos\theta)^2\\ & = \left \| \vec{a} \right \|^2\left \| \vec{b} \right \|^2\cdot (1- (cos\theta)^2) \end{aligned}
∥∥∥a×b∥∥∥2=∥a∥2∥∥∥b∥∥∥2−∥a∥2∥∥∥b∥∥∥2⋅(cosθ)2=∥a∥2∥∥∥b∥∥∥2⋅(1−(cosθ)2)
又因为【
(
c
o
s
θ
)
2
+
(
s
i
n
θ
)
2
=
1
(cos\theta)^2+(sin\theta)^2=1
(cosθ)2+(sinθ)2=1 】一定成立
所以:
∥
a
⃗
×
b
⃗
∥
2
=
∥
a
⃗
∥
2
∥
b
⃗
∥
2
⋅
(
s
i
n
θ
)
2
\left \|\vec{a}\times\vec{b}\right \| ^2= \left \| \vec{a} \right \|^2\left \| \vec{b} \right \|^2\cdot (sin\theta)^2
∥∥∥a×b∥∥∥2=∥a∥2∥∥∥b∥∥∥2⋅(sinθ)2
开方得:
∥
a
⃗
×
b
⃗
∥
=
∥
a
⃗
∥
∥
b
⃗
∥
⋅
s
i
n
θ
\left \|\vec{a}\times\vec{b}\right \|= \left \| \vec{a} \right \|\left \| \vec{b} \right \|\cdot sin\theta
∥∥∥a×b∥∥∥=∥a∥∥∥∥b∥∥∥⋅sinθ
6. 证明:向量叉乘的几何意义——结果的模为原先两向量构成三角形的面积二倍
在前者证明之后,此证明变得很容易,因为:
∥ b ⃗ ∥ ⋅ s i n θ \left \| \vec{b} \right \|\cdot sin\theta ∥∥∥b∥∥∥⋅sinθ 的长度就是以a为底边的三角形的高度:
所以:
∥
a
⃗
×
b
⃗
∥
=
∥
a
⃗
∥
∥
b
⃗
∥
⋅
s
i
n
θ
=
(
∥
a
⃗
∥
)
×
(
∥
b
⃗
∥
⋅
s
i
n
θ
)
=
底
×
高
=
2
×
(
底
×
高
2
)
=
2
×
S
三
角
形
\begin{aligned} \left \|\vec{a}\times\vec{b}\right \| & = \left \| \vec{a} \right \|\left \| \vec{b} \right \|\cdot sin\theta\\ & = (\left \| \vec{a} \right \|)\times (\left \| \vec{b} \right \|\cdot sin\theta)\\ & = 底 \times 高\\ & = 2\times (\frac{底 \times 高}{2})\\ & = 2\times S_{三角形} \end{aligned}
∥∥∥a×b∥∥∥=∥a∥∥∥∥b∥∥∥⋅sinθ=(∥a∥)×(∥∥∥b∥∥∥⋅sinθ)=底×高=2×(2底×高)=2×S三角形
总结
向量点乘
定义
a ⃗ ⋅ b ⃗ = x a x b + y a y b + z a z b \vec{a}\cdot\vec{b} = x_ax_b+y_ay_b+z_az_b a⋅b=xaxb+yayb+zazb
几何意义与作用举例
a ⃗ ⋅ b ⃗ = ∥ a ⃗ ∥ ⋅ ∥ b ⃗ ∥ c o s θ \vec{a}\cdot\vec{b} =\left \| \vec{a} \right \|\cdot\left \| \vec{b} \right \|cos\theta a⋅b=∥a∥⋅∥∥∥b∥∥∥cosθ
- 可以算出向量的夹角
- 可以直接根据此值判断两向量方向的关系:
-1
~0
~1
对应于相反
~垂直
~相同
。
向量叉乘
定义
a ⃗ × b ⃗ = ( y a z b − z a y b , z a x b − x a z b , x a y b − y a x b ) \vec{a}\times\vec{b} = (y_az_b-z_ay_b,z_ax_b-x_az_b,x_ay_b-y_ax_b) a×b=(yazb−zayb,zaxb−xazb,xayb−yaxb)
几何意义与作用举例1
结果的向量与原先两个向量都垂直
- 可以用来快速算出两个向量确定的一个平面的法向量方向。
几何意义与作用举例2
∥ a ⃗ × b ⃗ ∥ = ∥ a ⃗ ∥ ∥ b ⃗ ∥ s i n θ \left \|\vec{a}\times\vec{b}\right \| =\left \| \vec{a} \right \|\left \| \vec{b} \right \|sin\theta ∥∥∥a×b∥∥∥=∥a∥∥∥∥b∥∥∥sinθ
- 可以用来在已知顶点位置情况下,快速算出空间内一个三角形的面积。