兩條線段是否相交及交點座標

2021-09-29 16:12:29 字數 1972 閱讀 2787

兩條線段是否相交及交點座標

思路:已知兩條線段的起點和終點座標

先分別求出兩條線段的解析式,然後分情況討論。

lua**如下:

function uiutil:getposoftowline(pointa, pointb, pointm, pointn) -- ab線段,mn線段

local xa, ya = pointa.x,pointa.y -- ab線段 首座標

local xb, yb = pointb.x, pointb.y -- ab線段 尾座標

local xm, ym = pointm.x, pointm.y -- mn線段 首座標

local xn, yn = pointn.x, pointn.y -- mn線段 尾座標

-- 兩條線段的斜率,需要考慮斜率不存在的情況

local kab = (xb - xa ~= 0) and (yb - ya) / (xb - xa) or nil -- 線段ab斜率,方程式:y = x * kab + ya - xa * kab

local kmn = (xn - xm ~= 0) and (yn - ym) / (xn - xm) or nil -- 線段mn斜率,方程式:y = x * kmn + ym - xm * kmn

print("kab, kmn is ---", tostring(kab), tostring(kmn))

local xp, yp -- 設交點座標為 p

if kab and kmn then -- 斜率都存在

if kab ~= kmn then -- 還要考慮斜率為0不能做分母的情況

if kab == 0 then -- 線段ab:解析式 y = ya

xp = (ya - ym + xm * kmn) / kmn

yp = ya

elseif kmn == 0 then -- 線段mn:解析式 y = ym

xp = (ym - ya + xa * kab) / kab

yp = ym

else

xp = (ya - ym - xa * kab + xm * kmn) / (kmn - kab)

yp = (xm * kmn * kab - ym * kab + ya * kmn - xa * kab * kmn ) / (kmn - kab)

end

end

elseif kab then --線段mn: kmn不存在,解析式 x = xm

xp = xm

if kab == 0 then -- 線段ab:解析式 y = ya

yp = ya

else

yp = xm * kab + ya - xa * kab

end

elseif kmn then -- 線段ab: kab不存在, 解析式 x = xa

xp = xa

if kmn == 0 then -- 線段mn:解析式 y = ym

yp = ym

else

yp = xa * kmn + ym - xm * kmn

end

end

print("交點座標 is ----", table.tostring(cc.p(xp, yp)))

if xp and yp then

if ((xp >= xa and xp <= xb) or (xp >= xb and xp <= xa)) and ((yp >= ya and yp <= yb) or (yp >= yb and yp <= ya)) then

return cc.p(xp, yp) -- 滿足情況的交點座標

end

end

return nil

end

返回值即為交點座標。存在則兩條線段相交;不存在則不相交。

這只是乙個基本的方法,可以擴充套件用在其他功能裡,比如求線段與多邊形的交點等等

兩條線段是否相交

可以通過叉積來判斷兩條線段是否相交,ab ac與ab ad的結果為異號,並且 cd ca與cd cb的結果為 異號,則兩條直線相交。b相交.判斷兩線段是否相交 1 快速排斥試驗 設以線段 p1p2 為對角線的矩形為 r,設以線段 q1q2 為對角線的矩形為 t,若 r t 不相交,則兩線段不可能相交...

判斷兩條線段是否相交

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