判斷兩條線段是否相交(C )

2021-10-04 06:54:18 字數 845 閱讀 2332

背景

在做51nod上的第1951題時,需要根據給出的兩條線段來判斷這兩條線段是否相交。所以在這裡記錄一下。

判斷兩條線段是否相交有兩步:

①快速排斥計算

②跨立計算

快速排斥

給出線條ab、cd,如果以ab、cd為對角線的矩形不相交,那麼ab、cd也必不可能相交;如果矩形相交,那麼需要再通過跨立計算進行判斷。對於矩形不相交,有下面兩種情況:

對於上面兩種情況,可以分成四類來討論:

①ab兩座標中最大的x值 小於 cd兩座標中最小x值

②cd兩座標中最大的x值 小於 ab兩座標中最小x值

③ab兩座標中最大的y值 小於 cd兩座標中最小y值

④cd兩座標中最大的y值 小於 ab兩座標中最小y值

只要滿足了以上四種的其中一種,就可以認為ab與cd不相交。

跨立計算

參考**(c++)

class

line

line

(int xa,

int ya,

int xb,

int yb)

intget_max_x()

intget_min_x()

intget_max_y()

intget_min_y()

};bool

is_intersect

(line myline1, line myline2)

判斷兩條線段是否相交

如上圖,判斷線段ab和線段cd相交。分析 如果線段ab和線段cd相交,只能是圖中的兩種相交情況。可以用向量叉乘來判斷。如果 向量ab叉乘向量ac 向量ab叉乘向量ad 0 並且 向量cd叉乘向量ca 向量cd叉乘向量cb 0,那麼說明線段ab與線段cd相交。設a x1,y1 b x2,y2 c x3...

判斷兩條線段是否相交

題目 給定兩條線段,判斷這兩條線段是否相交,線段ab的表示形式是a x1,y1 b x2,y2 線段cd的表示形式為c x3,y3 d x4,y4 那麼我們如何判斷線段ab與線段cd是否相交。解析 在介紹如何解決線段相交問題之前,我們先介紹向量的叉積。如下圖所示 下面的圖 1 表示p1向量在p2向量...

判斷兩條線段是否相交

1.必備知識 向量積 矢積 與數量積 標積 的區別 名稱標積 內積 數量積 點積 矢積 外積 向量積 叉積 表示式 a,b和c粗體字,表示向量 a b a b cos a b c,其中 c a b sin c的方向遵守右手定則 幾何意義 向量a在向量b方向上的投影與向量b的模的乘積 c是垂直a b所...