算法一
1. 快速排斥实验:设一线段P1P2为对角线的矩形为P,设一线段Q1Q2为对角线的矩形为Q,如果P和Q不相交,显然两线段不会相交。
以下2种(方法1、方法2)方法判断矩形是否相交仅限于正矩形。
方法1:已知2个正矩形rect1: {(minx1, miny1), (maxx1,maxy1)}, rect2: {(minx2,miny2), (maxx2, maxy2)},设两个正矩形相交一定得到一个正矩形rect: {(minx, miny), (maxx, maxy)},如果minx > maxx 或 miny > maxy则该2个正矩形rect1和rect2不相交。
方法2:两个正矩形的重心距离在X和Y轴上都小于两个矩形长或宽的一半之和。
方法3:如果是非正矩形,那么需要矩形的每个边与另一个矩形每一条边判断是否相交,并且包含关系来判断矩形是否相交。如果不希望计算也可以递归使用本章节计算方法(快速排斥实验+跨立实验)。在计算线段是否相交的时候转换为正矩形是否相交,通过比较来实现矩形是否相交。
2.跨立实验:如果2个线段相交,则两个线段必然互相跨立对方。若P1P2的跨立Q1Q2,则矢量(P1-Q1)和(P2-Q1)位于(Q2-Q1)的两侧,(通过矢量叉积判断拐向)即 (P1-Q1)x(Q2-Q1)x(P2-Q1)x(Q2-Q1) < 0,通过交换律可得 (P1-Q1)x(Q2-Q1)x(Q2-Q1)x(P2-Q1) > 0。当(P1-Q1)x(Q2-Q1) = 0时,说明(P1-Q1)和(Q2-Q1)共线,因为已经通过了快速排斥,所以P1一定是在Q1Q2上。同理Q2-Q1)x(P2-Q1) = 0,则P2一定是在Q1Q2上。综上P1P2和Q1Q2互