--

Message: 2
Date: Mon, 26 Jan 2004 06:57:50 -0500
From: Jim Lyons <[EMAIL PROTECTED]>
Subject: Re: geometry-challenged
To: [EMAIL PROTECTED]
Message-ID: <[EMAIL PROTECTED]>
Content-Type: text/plain; charset=US-ASCII; format=flowed

Jim Hurley wrote in part:

 I'm not sure if this helps, but the function "intersection" below
 will return the intersection of any two lines.
 ...

 function intersection p1,p2,pp1,pp2
     ...

     return x & comma & y
 end intersection

Someone already pointed out that this function as written still allows one divide by zero case.


Jim

Check. I think the following handler takes care of the infinity.

One practical way to deal with the parallel lines case is to make them converge to a point at a very great distance--see below. Or, of course, you could return a "Lines parallel" message.


function intersection p1,p2,pp1,pp2
get the paramcount
if it is 1 then
put item 4 of p1 into pp2
put item 3 of p1 into pp1
put item 2 of p1 into p2
put item 1 of p1 into p1
end if
put item 1 of p1 into x1
put item 2 of p1 into y1
put item 1 of p2 into x2
put item 2 of p2 into y2
put item 1 of pp1 into xp1
put item 2 of pp1 into yp1
put item 1 of pp2 into xp2
put item 2 of pp2 into yp2
--Check if the lines are parallel and deal with it somehow
if (y2-y1)*(xp2-xp1) = (yp2-yp1)*(x2-x1) then add .0000001 to x2
if x1 = x2 or xp1 = xp2 then
if x2 = x1 then
return x1&comma&yp2 + (x1-xp2)*(yp2-yp1)/(xp2-xp1)
else
return xp2&comma& y2 + (xp1-x2)*(y2-y1)/(x2-x1)
end if
end if
put yp2 - y2 + x2*(y2-y1)/(x2 - x1) - xp2*(yp2 - yp1)/(xp2 - xp1) into numerator
put ((y2 - y1)/(x2 - x1) -(yp2 - yp1)/(xp2-xp1)) into denom
put numerator / denom into x
put y2 + (x-x2) *(y2-y1)/(x2-x1) into y
return x & comma & y
end intersection



Jim _______________________________________________ use-revolution mailing list [EMAIL PROTECTED] http://lists.runrev.com/mailman/listinfo/use-revolution

Reply via email to