天天看點

向量的點積

點積或點乘(Dot Product)

設向量a(x1,y1),向量b(x2,y2),二者的夾角θ,二者點乘的結果 d。

将兩個向量的每個分量對應相乘,然後将乘積結果相加,得出的結果,即:

d = x1*x2 + y1*y2;

向量的點選運算的結果是一個标量。

幾何意義:

d > 0, θ < 90,點積值d大于0,夾角θ小于90度;
d < 0, θ > 90,點積值d小于0,夾角θ大于90度;
d = 0, θ = 90,點積值d等于0,夾角θ等于90度。
可以通過兩個向量的點積來判斷兩個向量之間的夾角情況:
cosθ = dot(a,b)

推導cosθ = dot(a,b)

首先從三角形餘弦定理的推導開始,為後面的推導做基礎準備。
向量的點積
設三角形的三個頂點:
A(ax,ay,az),B(bx,by,bz),C(cx,cy,cz)
設向量:
AC(cx-ax,cy-ay,cz-az)
AB(bx-ax,by-ay,bz-az)
BC(cx-bx,cy-by,cz-bz)
設三角形ABC:
角α是向量AB,AC的夾角
角β是向量BC,BA的夾角
角γ是向量CA,CB的夾角

三角形的三條邊分别為: a,b,c(即三條向量的模長|AC|=b,|AB|=c,|BC|=a)

在c上做高 d,這條高d将c邊一分為二,設高d與邊c的交點為D,則:

cos(α)=|AD|/|AC|;
cos(β)=|BD|/|BC|;
由于
c = |AD|+|BD|
|AD|=cos(α)*|AC|=cos(α)*b
|BD|=cos(β)*|BC|=cos(β)*a
是以
c =cos(β)*a+cos(α)*b;
将等式兩邊均乘以c,得到:
c^2 = ac*cos(β)+bc*cos(α)(1)
以上同樣步驟,可以得到:
a^2 = ac*cos(β)+ab*cos(γ)
b^2 = bc*cos(α)+ab*cos(γ)
将上面兩式相加,得到:
a^2 + b^2 = ac*cos(β) + ab*cos(γ) + bc*cos(α) + ab*cos(γ)
= [ ac*cos(β) + bc*cos(α)]+[ab*cos(γ) + ab*cos(γ)]
結合(1),推導出:
a^2 + b^2 = c^2 + 2ab*cos(γ)
c^2 = a^2 + b^2 -2ab*cos(γ)
同理,可以推導出:
a^2 = b^2 + c^2 -2bc*cos(α)(2)
b^2 = a^2 + c^2 -2ac*cos(β)
在三角形中ABC中,向量AB的模長是c;向量AC的模長是b;向量BC的模長是a。
|AB| = c

|AC| = b

|BC| = a

注:向量的模長:向量的每個分量的平方和再開方,即:

|BC| = sqrt[(cx-bx)*(cx-bx)+(cy-by)*(cy-by)+(cz-bz)*(cz-bz)] 

則:

|BC|^2 =(cx-bx)*(cx-bx)+(cy-by)*(cy-by)+(cz-bz)*(cz-bz)

由此推導出:

a^2 = |BC|^2 = BC*BC(3)
因為向量:
BC = AC-AB(4)
是以:
|BC|^2 = (AC-AB)*(AC-AB)
|BC|^2 = AC*AC+AB*AB-2*AB*AC
|BC|^2 = |AC|^2 + |AB|^2 - 2*AB*AC(5)
結合上面的推導(3):
(2) = (5)
即:
|BC|^2 = |AC|^2 + |AB|^2 - 2*|AB|*|AC|*cos(α)
得:
|AB|*|AC|*cos(α) = (|AC|^2 +|AB|^2 - |BC|^2)/2
由(4)代入,得:
|AB*|AC|*cos(α) = (|AC|^2+|AB|^2-|(AC-AB)|^2)/2
将向量AC(cx-ax,cy-ay,cz-az),AB(bx-ax,by-ay,bz-az),BC(cx-bx,cy-by,cz-bz)代入:
|AB*|AC|*cos(α) ={(cx-ax)^2+(cy-ay)^2+(cz-az)^2+(bx-ax)^2+(by-ay)^2+(bz-az)^2 - 
[((cx-ax)-(bx-ax))^2+((cy-ay)-(by-ay))^2+((cz-az)-(bz-az))^2]}/2
合并去括号:
|AB|*|AC|*cos(α) =(cx-ax)(bx-ax)+(cy-ay)(by-ay)+(cz-az)(bz-az)
 =(cx-ax,cy-ay,cz-az) * (bx-ax,by-ay,bz-az)
即:
|AB|*|AC|*cos(α) =AC * AB
cos(α) = AC * AB / |AB|*|AC|
向量AB,AC經過标準化後,模長為1,|AB|*|AC| = 1*1 =1,則:
cos(α) = AC*AB/1 = AC*AB;
推導出:
cos(α) =AC*AB;

另一種推導方法:

假設a和b都是二維向量,θ1是a與x軸的夾角,θ2是b與x軸的夾角,向量a與b的夾角θ等于θ1 - θ2.、
a*b = ax*bx + ay*by 
=(|a|*sinθ1)*(|b|*sinθ2) +(|a|*cosθ1)*(|b|*cosθ2)
=|a||b|(sinθ1*sinθ2+cosθ1*cosθ2)
=|a||b|(cos(θ1-θ2))
=|a||b|cosθ
cosθ = a*b/|a||b|
标準化之後的向量a,b的摸|a|、|b|均為1:
cosθ = a*b

注:|a||b|(sinθ1*sinθ2+cosθ1*cosθ2)=|a||b|(cos(θ1-θ2)),這個推導過程參見兩角和差公式:

向量的點積