向量向量叉乘向量點乘_第1頁
向量向量叉乘向量點乘_第2頁
向量向量叉乘向量點乘_第3頁
向量向量叉乘向量點乘_第4頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、向量-向量叉乘向量點乘2010年07月28日星期三14:33向量(Vector)在幾乎所有的幾何問題中,向量(有時也稱矢量)是一個基本點。向量的定義包含方向和一個數(shù)(長度)。在二維空間中,一個向量可以用一對x和y來表示。例如由點(1,3)到(5,1的向量可以用(4,-2)來表示。這里大家要特別注意,我這樣說并不代表向量定義了起點和終點。向量僅僅定義方向和長度。向量加法向量也支持各種數(shù)學(xué)運(yùn)算。最簡單的就是加法。我們可以對兩個向量相加,得到的仍然是一個向量。我們有:V1(x1,y1)+V2(x2,y2)=V3(x1+x2,y1+y2)下圖表示了四個向量相加。注意就像普通的加法一樣,相加的次序?qū)Y(jié)果

2、沒有影響(滿足交換律),減法也是一樣的。Thesum&.fvectorsA+3+C+D點乘(DotProduct)如果說加法是憑直覺就可以知道的,另外還有一些運(yùn)算就不是那么明顯的,比如點乘和叉乘。點乘比較簡單,是相應(yīng)元素的乘積的和:V1(x1,y1)V2(x2,y2)=x1*x2+y1*y2注意結(jié)果不是一個向量,而是一個標(biāo)量(Scalar)。點乘有什么用呢,我們有:AB=IAIIBIos()是向量A和向量B見的夾角。這里IAI我們稱為向量A的模(norm),也就是A的長度,在二維空間中就是IAI=sqrt(x2+y2)。這樣我們就和容易計算兩條線的夾角:os()=AB/(IAIIBI)當(dāng)然你知

3、道要用一下反余弦函數(shù)acos()啦。(回憶一下cos(90)=0和cos(0)=1還是有好處的,希望你沒有忘記。)這可以告訴我們?nèi)绻c乘的結(jié)果,簡稱點積,為0的話就表示這兩個向量垂直。當(dāng)兩向量平行時,點積有最大值另外,點乘運(yùn)算不僅限于2維空間,他可以推廣到任意維空間。(譯注:不少人對量子力學(xué)中的高維空間無法理解,其實如果你不要試圖在視覺上想象高維空間,而僅僅把它看成三維空間在數(shù)學(xué)上的推廣,那么就好理解了)叉乘(crossproduct)相對于點乘,叉乘可能更有用吧。2維空間中的叉乘是:Vl(xl,yl)XV2(x2,y2)=xly2ylx2看起來像個標(biāo)量,事實上叉乘的結(jié)果是個向量,方向在z軸上

4、。上述結(jié)果是它的模。在二維空間里,讓我們暫時忽略它的方向,將結(jié)果看成一個向量,那么這個結(jié)果類似于上述的點積,我們有:AxB=IAIIBIin()然而角度和上面點乘的角度有一點點不同,他是有正負(fù)的,是指從A到B的角度。下圖中為負(fù)。另外還有一個有用的特征那就是叉積的絕對值就是A和B為兩邊說形成的平行四邊形的面積。也就是AB所包圍三角形面積的兩倍。在計算面積時,我們要經(jīng)常用到叉積。(譯注:三維及以上的叉乘參看維基:/wiki/Cross_product)點-線距離找出一個點和一條線間的距離是經(jīng)常遇見的幾何問題之一。假設(shè)給出三個點,A,B和C,你想找出點C到點A、B定出的直線間距離。第一步是找出A到B

5、的向量AB和A到C的向量AC,現(xiàn)在我們用該兩向量的叉積除以|ABI,這就是我們要找的的距離了(下圖中的紅線)。d=(ABxAC)/IABI如果你有基礎(chǔ)的高中幾何知識,你就知道原因了。上一節(jié)我們知道(ABXAC)/2是三角形ABC的面積,這個三角形的底是IABI,高就是C到AB的距離。有時叉積得到的是一個負(fù)值,這種情況下距離就是上述結(jié)果的絕對值。當(dāng)我們要找點到線段的距離時,情況變得稍稍復(fù)雜一些。這時線段與點的最短距離可能是點到線段的某一端點,而不是點到直線的垂線。例如上圖中點C到線段AB的最短距離應(yīng)該是線段BC。我們有集中不同的方法來判斷這種特殊情況。第一種情況是計算點積ABBe來判定兩線段間。

6、如果點積大于等于零,那么表示AB到BC是在-90到90度間,也就是說C到AB的垂線在AB夕卜,那么AB上到C距離最近的點就是B。同樣,如果BAAC大于等于零,那么點A就是距離C最近的點。如果兩者均小于零,那么距離最近的點就在線段AB中的莫一點。源代碼參考如下:/ComputethedotproduetABBCintdot(intA,intB,intC)AB=newint2;BC=newint2;AB0=B0-A0;AB1=B1-A1;BC0=C0-B0;BC1=C1-B1;intdot=AB0*BC0+AB1*BC1;returndot;/ComputetheerossproduetABxAC

7、inteross(intA,intB,intC)AB=newint2;AC=newint2;AB0=B0-A0;AB1=B1-A1;AC0=C0-A0;AC1=C1-A1;inteross=AB0*AC1-AB1*AC0;returneross;/ComputethedistaneefromAtoBdoubledistanee(intA,intB)intd1=A0-B0;intd2=A1-B1;returnsqrt(d1*d1+d2*d2);/ComputethedistaneefromABtoC/ifisSegmentistrue,ABisasegment,notaline.doubleli

8、nePointDist(intA,intB,intC,booleanisSegment)doubledist=cross(A,B,C)/distance(A,B);if(isSegment)intdot1=dot(A,B,C);if(dot10)returndistance(B,C);intdot2=dot(B,A,C);if(dot20)returndistance(A,C);returnabs(dist);上面的代碼看起來似乎是很繁瑣。不過我們可以看看在C+和C#中,采用了運(yùn)算符重載的類point,用我代表點乘,用人代表叉乘(當(dāng)然+-還是你所希望的),那么看起來就簡單些,代碼如下:/ComputethedistancefromABtoC/ifisSegmentistrue,ABisasegment,notaline.doublelinePointDist(pointA,pointB,pointC,boolisSegment)doubledist=(B-A)人(C-A)/sqrt(B-A)*(B-

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論