之前寫過一篇如何判斷兩條線段是否相交,我們緊接這個主題,再來談談如何判斷兩條直線是否相交
總體來上,判斷直線是否相交比判斷線段是否相交容易多了
兩條直線相交只有兩種情況
第一種:兩條直線斜率不相同(斜率不存在的情況算做一種斜率)
第二種:兩斜率相同且截距也相同,即重合(如果這個相同的斜率都是斜率不存在,那麼後者的相同就是與x軸的交點也相同)
函式**
第一步:有且僅有一條直線垂直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軸交點相同時才相交(重合)
現在開始的第三部和第四步就是斜率都存在的情況了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所...