1.快速排斥实验
满足下面的条件中,只要一个为真,那么判定不相交,反之转入下面的实验进行判定:
min(p1x,p2x) <= max(q1x,q2x) &&
min(q1x,q2x) <= max(p1x,p2x) &&
min(p1y,p2y) <= max(q1y,q2y) &&
min(q1y,q2y) <= max(p1y,p2y);
2.跨立实验
对于任意的两个向量,例如
- 条件1等价于:[(P1x-Q1x)*(Q2y-Q1y)-(P1y-Q1y)*( Q2x-Q1x)] * [(Q2x-Q1x)*(P2y-Q1y)-(Q2y-Q1y)*(P2x-Q1x)] > 0
- 条件2等价于:[(Q1x-P1x)*(P1y-P2y)-(Q1y-P1y)*( P2x-P1x)] * [(P2x-P1x)*(Q2y-P1y)-(P2y-P1y)*(Q2x-P1x)] > 0
将以上两个表达式写入if()语句即可判断线段相交与否。、
简化后:
((P1-Q1)×(Q2-Q1))*((Q2-Q1)×(P2-Q1))>0
((Q1-P1)×(P2-P1))*((P2-P1)×(Q2-P1))>0
同时满足以上两个条件时,线段Q1Q2跟线段P1P2才会相交(可以单独最后一个实验其实)