## Intersecting Lines

Tessting a function to test whether a line intersects with a quad.

``````-- returns a list of points where the specified line segment intersects

resultList = []
repeat with side = 1 to 4
-- get the line segment
if side < 4 then p4 = aQuad[side+1]
res = me._getPointofIntersection(p1,p2,p3,p4)
if res.ilk = #point then resultList.append( res )
end repeat
return resultList
end

on _getPointofIntersection (me, p1,p2,p3,p4)

denominator = (p4.locV-p3.locV)*(p2.locH-p1.loch) - (p4.locH-p3.locH)*(p2.locV-p1.locV)
if denominator = 0 then return 0 -- lines a parallel
num1 = (p4.locH-p3.locH)*(p1.locV-p3.locV) - (p4.locV-p3.locV)*(p1.locH-p3.locH)
num2 = (p2.locH-p1.locH)*(p1.locV-p3.locV) - (p2.locV-p1.locV)*(p1.locH-p3.locH)
Ua = num1/float(denominator)
Ub = num2/float(denominator)

if (Ua >= 0 AND Ua < 1) AND  (Ub >= 0 AND Ub < 1) then
x = p1.locH + ua * (p2.locH - p1.locH)
y = p1.locV + ua * (p2.locV - p1.locV)
return point(x,y)

else return 0
end

For more handy intersection functions, see "XLIB":/Codelib/xlib``````
First published 17/01/2006