今天學習了一下《計算幾何》,里面講了一下關於判斷一個點是否在某個三角形內的問題(在二維平面上)。其中有一個算法是“同向法”,主要是用叉積來判斷兩個點是否在某條線段的同一側,如圖(1)所示。關於“同向法”再次不做具體介紹,感興趣的同學可以百度之,或者關注本人后面更新的博文。關於《計算幾何》系列的博文,我會繼續學習,總結並發布到博客上。
圖1
好了,言歸正傳,我們只知道在二維平面中,兩個向量的叉乘其結果(叉積)是一個確切的值。例如向量A(x1,y1)和向量B(x2,y2)叉乘:A(x1,y1)xB(x2,y2) = |A||B|sina,其中a為向量A和向量B的夾角,|A|和|B|是向量A和向量B的模,sina是一個與角a有關的實數。可以看出向量A和向量B的最終結果是一個確切的實數。這和我們所知的兩個向量的叉積是一個垂直於其平面的法向量有些背離了,因為我們得到確實是一個值,而不是一個向量。這是神馬情況呢?
對於一個三角形ABC來說,CA和CB的夾角為a,那么三角形的面積S = 1/2(|CA||CB|sina),也就是S = 1/2(CAxCB),可以將該面積看作三角形的有向面積。由右手坐標系可知,正對着我們的方向為正面,那么背對着我們的一面就是負面,因為對於一個平面而言,肯定是有一個正面和負面了。如果定義該三角形的平面法向量的方向n,那么n就與向量CA,CB垂直,也就和三角形正面的法向量是一致的。所以說,二維向量的叉積不能簡單地看作是一個標量,其實質上是一個向量。
下面將二維向量看作成z軸值恆為0的三維向量,例如向量OA(x1,y1,0),OB(x2,y2,0),其實質上還是平面xy上的向量,只不過引入z軸,使其具有三維空間的上的意義。可以根據三維向量的叉積公式(1-1)計算得出OAxOB的值。
(1-1)
其矩陣表示如下:
那么OAxOB = (0,0,x1y2-x2y1)(#1),很明顯(0,0,x1y2-x2y1)也是一個向量,並且是垂直於向量OA和OB構成的平面的法向量,而其方向的正負就取決於它們的輸入(x1,y1)和(x2,y2)的值。