叉乘(三)——線段與線段相交嗎?
用途3:
我們現在的任務就是判斷線段P1P2和線段Q1Q2是否相交。
我們分兩步確定兩條線段是否相交:
(1)快速排斥試驗
設以線段 P1P2 為對角線的矩形為R,
設以線段 Q1Q2 為對角線的矩形為T,
如果矩形R和矩形T不相交,顯然兩線段不會相交。
(2)跨立試驗
如果兩線段相交,則兩線段必然相互跨立對方。
若P1P2跨立Q1Q2 ,則矢量 ( P1 - Q1 ) 和( P2 - Q1 )位于矢量( Q2 - Q1 ) 的兩側,
即1.(P1 - Q1) x (Q2 - Q1)<0, 這個式子表明Q1Q2在P1Q1的右方,也就是說P1Q1在Q1Q2的左方;
2. (Q2 - Q1) x (P2 - Q1)<0,這個式子表示P2Q1在Q1Q2的右方,
上面兩個式子可寫成( P1 - Q1 ) × ( Q2 - Q1 ) * ( Q2 - Q1 ) × ( P2 - Q1 ) > 0。
當 ( P1 - Q1 ) × ( Q2 - Q1 ) = 0 時,說明 ( P1 - Q1 ) 和 ( Q2 - Q1 )共線,
但是因為已經通過快速排斥試驗,所以 P1 一定在線段 Q1Q2上;
同理,( Q2 - Q1 ) ×(P2 - Q1 ) = 0 說明 P2 一定在線段 Q1Q2上。
所以判斷P1P2跨立Q1Q2的依據是:
( P1 - Q1 ) × ( Q2 - Q1 ) * ( Q2 - Q1 ) × ( P2 - Q1 ) >= 0。
同理判斷Q1Q2跨立P1P2的依據是:
( Q1 - P1 ) × ( P2 - P1 ) * ( P2 - P1 ) × ( Q2 - P1 ) >= 0。
具體情況如下圖所示:

posted on 2011-10-28 00:24 More study needed. 閱讀(858) 評論(0) 收藏 舉報
浙公網安備 33010602011771號