本文给出一种判断同一平面内两线段相交的判定方法。如下图:
如果两线段相交,则两线段必然相互跨立对方。
若P1P2跨立Q1Q2 ,则矢量(P1 - Q1)和( P2 - Q1)位于矢量(Q2 - Q1)的两侧,
即(( P1 - Q1) × ( Q2 - Q1 )) *(( P2 - Q1) × ( Q2 - Q1 )) < 0。
上式可改写成((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。
代码实现: