叉乘(三)——线段与线段相交吗?
用途3:
我們現(xiàn)在的任務(wù)就是判斷線段P1P2和線段Q1Q2是否相交。
我們分兩步確定兩條線段是否相交:
(1)快速排斥試驗(yàn)
設(shè)以線段 P1P2 為對(duì)角線的矩形為R,
設(shè)以線段 Q1Q2 為對(duì)角線的矩形為T,
如果矩形R和矩形T不相交,顯然兩線段不會(huì)相交。
(2)跨立試驗(yàn)
如果兩線段相交,則兩線段必然相互跨立對(duì)方。
若P1P2跨立Q1Q2 ,則矢量 ( P1 - Q1 ) 和( P2 - Q1 )位于矢量( Q2 - Q1 ) 的兩側(cè),
即1.(P1 - Q1) x (Q2 - Q1)<0, 這個(gè)式子表明Q1Q2在P1Q1的右方,也就是說P1Q1在Q1Q2的左方;
? 2.?(Q2 - Q1) x (P2 - Q1)<0,這個(gè)式子表示P2Q1在Q1Q2的右方,
上面兩個(gè)式子可寫成( P1 - Q1 ) × ( Q2 - Q1 ) * ( Q2 - Q1 ) × ( P2 - Q1 ) > 0。
當(dāng) ( P1 - Q1 ) × ( Q2 - Q1 ) = 0 時(shí),說明 ( P1 - Q1 ) 和 ( Q2 - Q1 )共線,
但是因?yàn)橐呀?jīng)通過快速排斥試驗(yàn),所以 P1 一定在線段 Q1Q2上;
同理,( Q2 - Q1 ) ×(P2 - Q1 ) = 0 說明 P2 一定在線段 Q1Q2上。
所以判斷P1P2跨立Q1Q2的依據(jù)是:
( P1 - Q1 ) × ( Q2 - Q1 ) * ( Q2 - Q1 ) × ( P2 - Q1 ) >= 0。
同理判斷Q1Q2跨立P1P2的依據(jù)是:
( Q1 - P1 ) × ( P2 - P1 ) * ( P2 - P1 ) × ( Q2 - P1 ) >= 0。
具體情況如下圖所示:
????
轉(zhuǎn)載于:https://www.cnblogs.com/o8le/archive/2011/10/28/2227181.html
總結(jié)
以上是生活随笔為你收集整理的叉乘(三)——线段与线段相交吗?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: customize shell prom
- 下一篇: json中的转义字符和数字