兩條線段是否相交

2021-07-24 13:46:05 字數 1108 閱讀 8289

可以通過叉積來判斷兩條線段是否相交,ab×ac與ab×ad的結果為異號,並且

cd×ca與cd×cb的結果為

異號,則兩條直線相交。

b相交.

判斷兩線段是否相交

1)快速排斥試驗

設以線段 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相交

2)跨立試驗

若 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 相交

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

判斷兩條線段是否相交

如上圖,判斷線段ab和線段cd相交。分析 如果線段ab和線段cd相交,只能是圖中的兩種相交情況。可以用向量叉乘來判斷。如果 向量ab叉乘向量ac 向量ab叉乘向量ad 0 並且 向量cd叉乘向量ca 向量cd叉乘向量cb 0,那麼說明線段ab與線段cd相交。設a x1,y1 b x2,y2 c x3...

判斷兩條線段是否相交

題目 給定兩條線段,判斷這兩條線段是否相交,線段ab的表示形式是a x1,y1 b x2,y2 線段cd的表示形式為c x3,y3 d x4,y4 那麼我們如何判斷線段ab與線段cd是否相交。解析 在介紹如何解決線段相交問題之前,我們先介紹向量的叉積。如下圖所示 下面的圖 1 表示p1向量在p2向量...

判斷兩條線段是否相交

1.必備知識 向量積 矢積 與數量積 標積 的區別 名稱標積 內積 數量積 點積 矢積 外積 向量積 叉積 表示式 a,b和c粗體字,表示向量 a b a b cos a b c,其中 c a b sin c的方向遵守右手定則 幾何意義 向量a在向量b方向上的投影與向量b的模的乘積 c是垂直a b所...