1. 快速排斥實驗:設一線段P1P2爲對角線的矩形爲P,設一線段Q1Q2爲對角線的矩形爲Q,若是P和Q不相交,顯然兩線段不會相交。算法
如下2種(方法一、方法2)方法判斷矩形是否相交僅限於正矩形。spa
方法1:已知2個正矩形rect1: {(minx1, miny1), (maxx1,maxy1)}, rect2: {(minx2,miny2), (maxx2, maxy2)},設兩個正矩形相交必定獲得一個正矩形rect: {(minx, miny), (maxx, maxy)},若是minx > maxx 或 miny > maxy則該2個正矩形rect1和rect2不相交。遞歸
方法2:兩個正矩形的重心距離在X和Y軸上都小於兩個矩形長或寬的一半之和。方法
方法3:若是是非正矩形,那麼須要矩形的每一個邊與另外一個矩形每一條邊判斷是否相交,而且包含關係來判斷矩形是否相交。若是不但願計算也能夠遞歸使用本章節計算方法(快速排斥實驗+跨立實驗)。在計算線段是否相交的時候轉換爲正矩形是否相交,經過比較來實現矩形是否相交。im
2.跨立實驗:若是2個線段相交,則兩個線段必然互相跨立對方。若P1P2的跨立Q1Q2,則矢量(P1-Q1)和(P2-Q1)位於(Q2-Q1)的兩側,(經過矢量叉積判斷拐向)即 (P1-Q1)x(Q2-Q1)x(P2-Q1)x(Q2-Q1) < 0,經過交換律可得 (P1-Q1)x(Q2-Q1)x(Q2-Q1)x(P2-Q1) > 0。當(P1-Q1)x(Q2-Q1) = 0時,說明(P1-Q1)和(Q2-Q1)共線,由於已經經過了快速排斥,因此P1必定是在Q1Q2上。同理Q2-Q1)x(P2-Q1) = 0,則P2必定是在Q1Q2上。綜上P1P2和Q1Q2互相跨立:img
1.(P1-Q1)x(Q2-Q1)x(Q2-Q1)x(P2-Q1) ≥ 0co
2.(Q1-P1)X(P2-P1)x(P2-P1)x(Q2-P1) ≥ 0參數
定義A、B、C、D是二維空間點,則有向線段AB、CD的參數方程:
AB = A + r(B-A), r ∈[0,1]
CD = C + s(D-C), s ∈[0, 1]
導出:
r = ((Ay-Cy)(Dx-Cx) - (Ax-Cx)(Dy-Cy))/((Bx-Ax)(Dy-Cy) - (By-Ay)(Dx-Cx))
s= ((Ay-Cy)(Bx-Ax) - (Ax-Cx)(By-Ay))/ ((Bx-Ax)(Dy-Cy) - (By-Ay)(Dx-Cx))
定義:設P維直線AB和CD的焦點,則P = (PX, PY) = (Ax+r(Bx-Ax), Ay+r(By-Ay)),若是0≤r≤1而且0≤s≤1,則有向線段AB和CD的焦段存在,不然焦點不存在。
若((Bx-Ax)(Dy-Cy) - (By-Ay)(Dx-Cx)) = 0,則AB和CD平行。
若 ((Ay-Cy)(Dx-Cx) - (Ax-Cx)(Dy-Cy)) = 0,則AB和CD共線。
若直線AB和CD相交,而交點不在線段AB和CD之間,則焦點位置可經過以下判斷:
1. 若r > 1, 則交點P位於有向線段AB的延遲線上。
2.若r < 0,則焦點P位於有向線段BA延長線上。
3.若s > 1,則交點P位於有向線段CD的延遲線上。
4.若s < 0,則交點P位於有向線段DC的延遲線上。