python判断两线段是否相交_判断两线段是否相交
算法⼀
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互相跨⽴:
1.(P1-Q1)x(Q2-Q1)x(Q2-Q1)x(P2-Q1) ≥ 0
2.(Q1-P1)X(P2-P1)x(P2-P1)x(Q2-P1) ≥ 0
算法⼆
定义A、B、C、D是⼆维空间点,则有向线段AB、CD的参数⽅程:
AB = A + r(B-A), r ∈[0,1]
CD = C + s(D-C), s ∈[0, 1]
景区管理
导出:
r = ((Ay-Cy)(Dx-Cx) - (Ax-Cx)(Dy-Cy))/((Bx-Ax)(Dy-Cy) - (By-Ay)(Dx-Cx))
浅蓝色壁纸
s= ((Ay-Cy)(Bx-Ax) - (Ax-Cx)(By-Ay))/ ((Bx-Ax)(Dy-Cy) - (By-Ay)(Dx-Cx))
定义:设P维直线AB和CD的焦点,则P = (PX, PY) = (Ax+r(Bx-Ax), Ay+r(By-Ay)),如果0≤r≤1并且0≤s≤1,则有向线段AB和CD 的焦段存在,否则焦点不存在。
若((Bx-Ax)(Dy-Cy) - (By-Ay)(Dx-Cx)) = 0,则AB和CD平⾏。
若 ((Ay-Cy)(Dx-Cx) - (Ax-Cx)(Dy-Cy)) = 0,则AB和CD共线。
若直线AB和CD相交,⽽交点不在线段AB和CD之间,则焦点位置可通过如下判断:
1. 若r > 1, 则交点P位于有向线段AB的延迟线上。风车英文
吉他分几种类型2.若r < 0,则焦点P位于有向线段BA延长线上。
闺蜜英语怎么写3.若s > 1,则交点P位于有向线段CD的延迟线上。起风的季节
4.若s < 0,则交点P位于有向线段DC的延迟线上。