計算幾何基礎 向量和叉積

2021-08-25 09:14:21 字數 1770 閱讀 8926

[size=small][b]向量[/b][/size]

如果一條線段的端點是有次序之分的話,那麼這種線段就稱為 有向線段,如果有向線段p1p2的起點p1在座標的原點,則可以把它稱為向量 p2

[size=small][b]向量的加減[/b][/size]

設二維向量 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)

[size=small][b]向量叉積[/b][/size]

設向量 p = (x1, y1), q = (x2, y2),則 p * q = x1 * y2 - x2 * y1; 其結果是乙個由 (0, 0), p, q, p + q 所組成的平行四邊形的 帶符號的面積,p * q = -(q * p), p * (- q) = -(p * q)

叉積的乙個非常重要的性質是可以通過它的符號來判斷兩向量相互之間的順逆時針關係:

若 p * q > 0,則 p 在 q 的順時針方向

若 p * q < 0, 則 p 在 q 的逆時針方向

若 p * q = 0,則 p 與 q 共線,但不確定 p, q 的方向是否相同

[size=small][b]折線段的拐向判斷[/b][/size]

如圖,假設有折線段 p0p1p2 ,要確定 p1p2 相對於 p0p1 是向左拐還是向右拐,可以通過計算(p2 - p0)*(p1 - p0) 的符號來確定折線的拐向(點 p2 - p0 實際上就是向量 p2,但這裡要注意線段和向量的區別)

[img]

[size=small][b]判斷兩線段是否相交[/b][/size]

[b]1)快速排斥試驗[/b]

設以線段 p1p2 為對角線的矩形為 r,設以線段 q1q2 為對角線的矩形為 t,若 r、t 不相交,則兩線段不可能相交

假設 p1 = (x1, y1), p2 = (x2, y2), q1 = (x3, y3), q2 = (x4, y4),設矩形 r 的 x 座標的最小邊界為 minrx = min(x1, x2),以此類推,將矩形表示為 r = (minrx, minry, maxrx, maxry) 的形式,若兩矩形相交,則相交的部分構成了乙個新的矩形 f,如圖所示,我們可以知道 f 的 minfx = max(minrx, mintx), minfy = max(minry, minty), maxfx = min(maxrx, maxtx), maxfy = min(maxry, maxtx),得到 f 的各個值之後,只要判斷矩形 f 是否成立就知道 r 和 t 到底有沒有相交了,若 minfx > maxfx 或 minfy > maxfy 則 f 無法構成,rt不相交,否則 rt相交

[img]

[b]2)跨立試驗[/b]

若 p1p2 跨立 q1q2,則 p1,p2 分別在 q1q2 所在直線的兩端,則有 (p1 - q1)*(q2 - q1) * (q2 - q1)*(p2 - q1) > 0,當 (p1 - q1)*(q2 - q1) = 0 時,說明 (p1 - q1) 與 (q2 - q1) 共線,但由於已經經過快速排斥試驗,所以 q1 必為 p1p2 與 q1q2 的交點,依然滿足線段相交的條件,則跨立試驗可改為:

當 (p1 - q1)*(q2 - q1) * (q2 - q1)*(p2 - q1) >= 0,則 p1p2 跨立 q1q2,當 q1q2 也跨立 p1p2 的時候,則 p1p2 相交

(注意式子中被隔開的 * 代表兩個叉積的值的相乘,而另外的兩個 * 則代表計算向量叉積)

[img]

計算幾何基礎 點積和叉積的用處

計算幾何是演算法競賽的一大塊,而叉積是計算機和的基礎。首先叉積是計算說向量之間的叉積,那麼我們可以這樣定義向量,以及向量的運算子過載。struct point typedef point vector vector operator vector a,vector b vector operator...

caioj 計算幾何 面積 計算幾何 叉積

題意 在乙個平面座標系上隨意畫一條有n個點的封閉折線 按畫線的順序給出點的座標 保證封閉折線的任意兩條邊都不相交。最後要計算這條路線包圍的面積。用叉積有關知識解決。重要結論 abs 三點的叉積 2為這三點圍成的三角形的面積。簡要證明 上圖中,黑色的三角形面積為矩形 三個三角形,設數,計算,合併同類項...

計算幾何 點積與叉積

a和b為兩個向量,a x1,y1 b x2,y2 a b的幾何意義為a在b上的投影長度乘以b的模長 a b a b cos 其中 為a,b之間的夾角 a b x1 x2 y1 y2 點積的應用 1 判斷兩個向量是否垂直 a b a b 0 2 求兩個向量的夾角,點積 0為鈍角,點積 0為銳角 向量積...