向量的點乘與叉乘

2021-07-03 23:54:01 字數 2583 閱讀 4336

向量 - 向量叉乘 向量點乘

向量(vector)

在幾乎所有的幾何問題中,向量(有時也稱向量)是乙個基本點。向量的定義包含方向和乙個數(長度)。在二維空間中,乙個向量可以用一對x和y來表示。例如由點(1,3)到(5,1的向量可以用(4,-2)來表示。這裡大家要特別注意,我這樣說並不代表向量定義了起點和終點。向量僅僅定義方向和長度。

向量加法

向量也支援各種數**算。最簡單的就是加法。我們可以對兩個向量相加,得到的仍然是乙個向量。我們有:

v1(x1, y1)+v2(x2, y2)

=v3(x1+x2, y1+y2)

下圖表示了四個向量相加。注意就像普通的加法一樣,相加的次序對結果沒有影響(滿足交換律),減法也是一樣的。

點乘(dot product)

如果說加法是憑直覺就可以知道的,另外還有一些運算就不是那麼明顯的,比如點乘和叉乘。

點乘比較簡單,是相應元素的乘積的和:

v1( x1, y1)   v2(x2, y2) = x1*x2 + y1*y2

注意結果不是乙個向量,而是乙個標量(scalar)。點乘有什麼用呢,我們有:

a   b = |a||b|cos(θ)

θ是向量a和向量b見的夾角。這裡|a|我們稱為向量a的模(norm),也就是a的長度, 在二維空間中就是|a| = sqrt(x2+y2)。這樣我們就和容易計算兩條線的夾角

cos(θ) = a   b /(|a||b|)

當然你知道要用一下反余弦函式acos()啦。(回憶一下cos(90)=0 和cos(0) = 1還是有好處的,希望你沒有忘記。)這可以告訴我們如果點乘的結果,簡稱點積,為0的話就表示這兩個向量垂直。當兩向量平行時,點積有最大值

另外,點乘運算不僅限於2維空間,他可以推廣到任意維空間。(譯註:不少人對量子力學中的高維空間無法理解,其實如果你不要試圖在視覺上想象高維空間,而僅僅把它看成三維空間在數學上的推廣,那麼就好理解了)

叉乘(cross product)

相對於點乘,叉乘可能更有用吧。2維空間中的叉乘是:

v1(x1, y1) x v2(x2, y2) = x1y2 – y1x2

看起來像個標量,事實上叉乘的結果是個向量,方向在z軸上。上述結果是它的模。在二維空間裡,讓我們暫時忽略它的方向,將結果看成乙個向量,那麼這個結果類似於上述的點積,我們有:

a x b = |a||b|sin(θ)

然而角度 θ和上面點乘的角度有一點點不同,他是有正負的,是指從a到b的角度。下圖中 θ為負。

另外還有乙個有用的特徵那就是叉積的絕對值就是a和b為兩邊說形成的平行四邊形的面積。也就是ab所包圍三角形面積的兩倍。在計算面積時,我們要經常用到叉積。

(譯註:三維及以上的叉乘參看維基:

點-線距離

找出乙個點和一條線間的距離是經常遇見的幾何問題之一。假設給出三個點,a,b和c,你想找出點c到點a、b定出的直線間距離。第一步是找出a到b的向量ab和a到c的向量ac,現在我們用該兩向量的叉積除以|ab|,這就是我們要找的的距離了(下圖中的紅線)。

d = (ab x ac)/|ab|

當我們要找點到線段的距離時,情況變得稍稍複雜一些。這時線段與點的最短距離可能是點到線段的某一端點,而不是點到直線的垂線。例如上圖中點c到線段ab的最短距離應該是線段bc。我們有集中不同的方法來判斷這種特殊情況。第一種情況是計算點積ab bc來判定兩線段間夾角

//compute the dot product ab   bc

int dot(int a, int b, int c)

//compute the cross product ab x ac

int cross(int a, int b, int c)

//compute the distance from a to b

double distance(int a, int b)

//compute the distance from ab to c

//if issegment is true, ab is a segment, not a line.

double linepointdist(int a, int b, int c, boolean issegment)

return abs(dist);

}上面的**看起來似乎是很繁瑣。不過我們可以看看在c++和c#中,採用了運算子過載的類point,用『*』代表點乘,用'^'代表叉乘(當然'+''-'還是你所希望的),那麼看起來就簡單些,**如下:

//compute the distance from ab to c

//if issegment is true, ab is a segment, not a line.

double linepointdist(point a, point b, point c, bool issegment)

return abs(dist);}

向量點乘與叉乘

點乘 dot product 點乘,也叫向量的內積 數量積。顧名思義,求下來的結果是乙個數。向量a 向量b a b cos 在物理學中,已知力與位移求功,實際上就是求向量f與向量s的內積,即要用點乘。將向量用座標表示 三維向量 若向量a a1,b1,c1 向量b a2,b2,c2 則 向量a 向量b...

向量點乘與叉乘

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!向量 vector 在幾乎所有的幾何問題中,向量 有時也稱向量 是乙個基本點。向量的定義包含方向和乙個數 長度 在二維空間中,乙個向量可以用一對x和y來表示。例如由點 1,3 到 5,1的向量可以用 4,2 來表示。這裡大家要特別注意,我這樣說並不...

向量點乘與叉乘

向量 vector 在幾乎所有的幾何問題中,向量 有時也稱向量 是乙個基本點。向量的定義包含方向和乙個數 長度 在二維空間中,乙個向量可以用一對x和y來表示。例如由點 1,3 到 5,1的向量可以用 4,2 來表示。這裡大家要特別注意,我這樣說並不代表向量定義了起點和終點。向量僅僅定義方向和長度。向...