geometry-challenged

Jim Hurley jhurley at infostations.com
Mon Jan 26 08:38:59 EST 2004


>
>Message: 4
>Date: Sun, 25 Jan 2004 19:22:13 -0500
>From: Cubist at aol.com
>Subject: Re: geometry-challenged
>To: use-revolution at lists.runrev.com
>Message-ID: <0CB9F376.1DEE8A5F.00048C52 at aol.com>
>Content-Type: text/plain; charset=iso-8859-1
>
>sez jhurley at infostations.com:
>>  I'm not sure if this helps, but the function "intersection" below
>>  will return the intersection of any two lines.
>    I tried the function on two *non*-intersecting lines, and it gave 
>me a "divide by zero" error. Not good. You need to find the 
>mathematical intersection of the infinite lines defined by the two 
>pairs of endpoints, and *then* decide whether or not that 
>intersection point is within *both* of the line *segments* defined 
>by said points.
>
>------------------------------
>
>Message: 5
>Date: Sun, 25 Jan 2004 20:02:21 -0500
>From: Brian Yennie <briany at qldlearning.com>
>Subject: Re: geometry-challenged
>To: How to use Revolution <use-revolution at lists.runrev.com>
>Message-ID: <4B60F08C-4F9B-11D8-AA23-000393AA08D2 at qldlearning.com>
>Content-Type: text/plain; charset=US-ASCII; format=flowed
>
>For the problem at hand, it should suffice to add a little if-logic to
>the beginning.
>
>A line between two non-overlapping objects will always intersect
>exactly one of the sides of each object- you just have to pick the
>right one and _then_ use the intersection function.
>
>With that said, an intersection function should probably error
>gracefully for parallel lines (i.e. non-intersecting).
>
>- Brian

The function should yield the point of intersection of the two 
infinite lines defined by the line segments. It may or may not lie 
within the end points of either line segment.

Could you send me the points which gave you the error message.? 
(Notice that the values returned are not rounded. I you want to 
insert them as graphic points you may want to return round(x) & comma 
& round(y).)

Thanks,

Jim.

P.S. The following function helps to deal with the problem of parallel lines.

function intersection p1,p2,pp1,pp2
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
   if x1 = x2 or xp1 = xp2 then
     if x1 = x2 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
   if (y2-y1)/(x2-x1) = (yp2-yp1)/(xp2-xp1) then add .0000001 to 
y2--if lines are parallel
   -- This produces a VERY large x or y coordinate. Parallel for all 
practical purposes.
   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



More information about the use-livecode mailing list