如何判斷兩條直線是否相交

2021-10-03 04:51:38 字數 1443 閱讀 6131

之前寫過一篇如何判斷兩條線段是否相交,我們緊接這個主題,再來談談如何判斷兩條直線是否相交

總體來上,判斷直線是否相交比判斷線段是否相交容易多了

兩條直線相交只有兩種情況

第一種:兩條直線斜率不相同(斜率不存在的情況算做一種斜率)

第二種:兩斜率相同且截距也相同,即重合(如果這個相同的斜率都是斜率不存在,那麼後者的相同就是與x軸的交點也相同)

函式**

bool

judge

(int ax1,

int ay1,

int ax2,

int ay2,

int bx1,

int by1,

int bx2,

int by2)

if(ax2-ax1==

0&&bx2-bx1==0)

double k1=

(ay2-ay1)

*1.0

/(ax2-ax1)

;double k2=

(by2-by1)

*1.0

/(bx2-bx1);if

(k1!=k2)

return1;

if(ay1-k1*ax1==by1-k2*bx1)

return1;

return0;

}

第一步:有且僅有一條直線垂直x軸

兩條直線中,如果只有一條直線垂直於x軸(斜率不存在),那麼這兩條直線一定相交

if

((ax2-ax1==

0&&bx2-bx1!=0)

||(ax2-ax1!=

0&&bx2-bx1==0)

)

第二步:兩條直線都垂直於x軸

此時當且僅當兩條直線於x軸交點相同時才相交(重合)

if

(ax2-ax1==

0&&bx2-bx1==0)

現在開始的第三部和第四步就是斜率都存在的情況了

第三步:兩條直線的斜率不相等

此時一定相交

if

(k1!=k2)

return

1;

第四步:兩條直線斜率不相等

此時只有兩條直線的截距相等才會相交

if

(ay1-k1*ax1==by1-k2*bx1)

return1;

return

0;

判斷兩條線段是否相交

如上圖,判斷線段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所...