給定兩條線段,判斷是否相交
#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...