三維向量的簡單運算(點積 叉積及點到直線的距離)

2021-10-25 16:51:15 字數 1767 閱讀 9024

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

v1( x1, y1, z1)·v2(x2, y2, z2) = x1*x2 + y1*y2 + z1*z2;

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

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

θ是向量a和向量b見夾角。這裡|a|我們稱為向量a的模(norm)。這樣我們就和容易計算兩條線的夾角:

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

叉乘(cross product)

首先我們知道 ,對於向量u和v, u x v的結果,是得到乙個既垂直於u又垂直於v的向量,假設記作n.

則有下面公式

n = u x v;

而n的方向,是由右手法則決定的。 即伸出右手,四個手指方向從u繞到v. 此時,大姆指的方向,就是n的方向。 我們通常叫做右向量。

引用一下維基百科的圖來說明問題,有興趣的兄弟可以照圖比劃一下。 (注:圖中向量是用的a x b來表示)

如果只是為了應用的話,走到這一步就可以停下了。後面的知識,只是為了滿足一下好奇心。

那我們就來看看,這個結論是怎麼來的呢? 我們接著來推導。

為了更好地推導,我們需要加入三個軸對齊的單位向量。

i,j,k.

i,j,k滿足以下特點

i = j x k; j = k x i; k = i x j;

k x j = –i; i x k = –j; j x i = –k;

i x i = j x j = k x k = 0; (0是指0向量)

由此可知,i,j,k是三個相互垂直的向量。它們剛好可以構成乙個座標系。

這三個向量的特例就是 i = (1,0,0) j = (0,1,0) k = (0,0,1)。

好,那對於處於i,j,k構成的座標系中的向量u,v我們可以如下表示

u = xu*i + yu*j + zu*k;

v = xv*i + yv*j + zv*k;

那麼 u x v = (xu*i + yu*j + zu*k) x (xv*i + yv*j + zv*k)

= xu*xv*(ixi) + xu*yv*(i x j) + xu*zv*(i x k) + yu*xv*(j x i) + yu*yv*(j x j) + yu*zv*(j x k) + zu*xv*( k x i ) + zu*yv(k x j) + zu*zv(k x k)

由於上面的i,j,k三個向量的特點,所以,最後的結果可以簡化為

u x v = (yu*zv – zu*yv)*i + (zu*xv – xu*zv)j + (xu*yv – yu*xv)k;

於是,在i,j,k構成的座標系中。集就是上面的結果。

當i = (1,0,0) j = (0,1,0) k = (0,0,1)時,我們通常省略i,j,k的寫法。最終也就得到了我們的右向量。

叉乘的意義

叉乘表示垂直於uxv的右向量。

使用的地方

可以通過叉乘,修正向量關係,從而構建座標系。 常見的有 攝相機矩陣和tbn空間轉換矩陣的構建。

點到線的距離

點到面的距離

設某三維平面表示式為

a*x+b*y+c*z+d = 0;

則其法向量即為: (a,b,c). 

任意一點 p = (x1, y1, z1)到該平面的距離為:

(a*x1 + b*y1 + c*z1+d) / (a*a + b*b +c*c)

向量運算(點積,叉積)

向量加減法 兩向量a與b的和為乙個向量,記為c,即 c a b c與兩向量a與b的關係遵循平行四邊形法則。設二維向量 p x1,y1 q x2 y2 則向量的加法定義為 p q x1 x2,y1 y2 同理,向量減法為 p q x1 x2,y1 y2 顯然有性質 p q q p p q q p 向量...

點積運算叉積運算

向量的點積即數量積,叉積又稱向量積或向量積。點積 叉積甚至兩者的混合積在場論中是極其基本的運算。matlab是用函式實現向量點 叉積運算的。1.點積運算 點積運算 a b 的定義是參與運算的兩向量各對應位置上元素相乘後,再將各乘積相加。所以向量點積的結果是一標量而非向量。點積運算函式是 dot a,...

向量的點積和叉積

點乘 也叫向量的內積 數量積.顧名思義,求下來的結果是乙個數.向量a 向量b a b cos 在物理學中,已知力與位移求功,實際上就是求向量f與向量s的內積,即要用點乘.叉乘 也叫向量的外積 向量積.顧名思義,求下來的結果是乙個向量,記這個向量為c.向量c 向量a 向量b a b sin 向量c的方...