線段相交問題

2022-06-04 04:24:12 字數 1206 閱讀 5028

判斷兩條直線是否相交,有兩個步驟確定:

1、快速排斥。 2、跨立實驗(啊啊啊,逼格好高)

然而事實解法的逼格卻。。。

一 、快速排斥簡單的說就是確保他們能相交的基本的要求是滿足的:

如上圖,明顯的,要兩個線段相交,就要豎直方向有重疊(min(a.y, b.y) < max(d.y, c.y) && max(a.y, b.y) > min(d.y, c.y))

和水平方向有重疊(min(a.x, b.x) < max(c.x, d.x) && min(c.x, d.x) < max(a.x, b.x));覺得好low

二、跨立實驗

如果兩條線段相交,那麼必須跨立,就是以一條線段為標準,另一條線段的兩端點一定在這條線段的兩端

用到叉積的知識,通過正負來判斷一條線段兩個點的相對位置;

貼上板子:

1

/***************************************線段相交模板****************************************/2

struct point

5 point(int a,intb)9

void input()

12};

13struct line

16line(point x,point y)

20void

input()

24};

25bool judge(point &a,point &b,point &c,point &d)

2649

50/*

**************************************線段相交模板***************************************

*/

兩線段相交問題

給出平面上兩條線段的兩個端點,判斷這兩條線段是否相交 有乙個公共點或有部分重合認為相交 如果相交,輸出 yes 否則輸出 no input 第1行 乙個數t,表示輸入的測試數量 1 t 1000 第2 t 1行 每行8個數,x1,y1,x2,y2,x3,y3,x4,y4。10 8 xi,yi 10 ...

線段是否相交

給定兩條線段,判斷是否相交 include include use sort include use fabs using namespace std struct point 點座標 struct line 線段屬性 void isintersect line line1,line line2 i...

線段相交判斷

1.快速排斥實驗。設以線段p1p2為對角線的矩形為r,設以線段q1q2為對角線的矩形為t,如果r和t不相交,則兩線段不相交。所以p1p2和q1q2相交的必要條件是以他們為對角線的矩形相交,即 min p1.x,p2.x max q1.x,q2.x min q1.x,q2.x max p1.x,p2....