線段是否相交

2021-07-05 12:30:11 字數 1306 閱讀 8163

給定兩條線段,判斷是否相交

#include#include//use sort

#include//use fabs

using namespace std;

struct point//點座標

;struct line//線段屬性

;void isintersect(line &line1, line &line2);

int main()

void getline(line &line)//求出線段的k和b

bool judgeisintersect(line &line,double &pointy)//判斷斜率存在的線段的兩個縱座標與直線交點的縱座標,如果相交,那麼交點的縱座標是在line2兩點縱座標的中間

if (line.p1.y < line.p2.y) }

void isintersect(line &line1, line &line2)

; sort(a, a + 4);

double length = a[3] - a[0];

double lengthsum = fabs(line1.p1.y - line1.p2.y) + fabs(line2.p1.y - line2.p2.y);

if (length > lengthsum)

cout << "不相交\n";

else

cout << "相交\n";

} else

cout << "不想交\n";

} //2.

//line1斜率不存在,line2存在

else if (line1x == 0 && line2x != 0)

//3.

//line1存在,line2的斜率不存在

else if (line1x != 0 && line2x == 0)

//4.

//line1,line2的斜率都存在

else

; sort(a, a + 4);

double length = a[3] - a[0];

double lengthsum = fabs(line1.p1.x - line1.p2.x) + fabs(line2.p1.x - line2.p2.x);

if (length > lengthsum)

cout << "不相交\n";

else

cout << "相交\n";

}else

cout << "不相交\n";

} else//斜率不同

}}

線段與圓是否相交

判斷圓和線段是否相交。分兩種情況 推導過程如下 線段所在直線方程的一般式為 ax by c 0 線段兩個端點a x1,y1 b x2,y2 圓心o px,py 根據y kx z 那麼直線斜率k y1 y2 x1 x2 然後再將點a帶入方程可得z x1y2 x2y1 x1 x2 然後轉化成一般式的形式...

判斷兩線段是否相交

兩條線段有且僅有乙個公共點,且這個點不是任何一條線段的端點時,稱這兩條線段是嚴格相交的。也就是說線段不嚴格相交時可以將端點作為交點,但本文不討論不嚴格相交,只討論嚴格相交的情況 即使它們在演算法實現上差別不大 在判斷兩條線段是否相交時,我們常用快速排斥實驗跟跨立實驗這兩種方法,快速排斥實驗能很快的排...

判斷兩線段是否相交

判斷兩線段是否相交 我們分兩步確定兩條線段是否相交 1 快速排斥試驗 設以線段 p1p2 為對角線的矩形為r,設以線段 q1q2 為對角線的矩形為t,如果r和t不相交,顯然兩線段不會相交。2 跨立試驗 如果兩線段相交,則兩線段必然相互跨立對方。若p1p2跨立q1q2 則向量 p1 q1 和 p2 q...