ANN Testing for overlapping polygons

Alex Tweedly alex at tweedly.net
Mon Jun 27 07:45:34 EDT 2005


Jim Hurley wrote:

> [Hope this isn't a repeat. According to my ISP this was not delivered. 
> Perhaps the problems that Heather warned of over the weekend.]
>
I've only seen one copy.

> Well, I said it was grubby, but here it is, a stack which test for 
> overlap between polygons.
>
That's not at all grubby - that's really neat, very nice job.

It does demonstrate that the built-in function "within" is fairly 
inexact (since it's defined as "whether a point is within the clickable 
part of a shape" this inexact-ness is probably intentional). If you 
position the blue shape above the red one such that the approx mid-point 
is above the top point of the red one, and slowly drag it down, you find 
that "point is within" becomes true when there is still a clearly 
visible yellow gap between the two shapes - so it's clear that the RR 
test doesn't involve checking pixel colours..

> I was wondering how RR tests for within(). One way would be to draw a 
> line from the point in question to the edge of the screen. If there 
> are an odd number of intersections with the lines of the polygon, then 
> the point is inside, otherwise it is outside.

Either that or decide if it is "above" or "below", and "left" or "right" 
of each directed line segment in turn; only if both pairs match is it 
within.  Both of those allow for easy "inexact" checks, so they could 
use either.

> But how does RR paste a color into an opaque polygon, how does it know 
> which pixels are inside and which outside the polygon? It doesn't test 
> for all points, of which there are an infinite number, but it must 
> know which pixels (integer points) are located inside--this generally 
> would be sufficient to test for overlap--and collision. Maybe this 
> would be a request feature RR might consider. The hard part of overlap 
> and collision may already be in the engine.
>
Standard algorithm uses a "scan" pattern over the bounding rectangle, 
toggling on/off as the scan crosses (or touches) the edges. I don't know 
if that'll be within the engine or if they'll use system-provided 
primitives to handle filled polygons.

Either way, since there's already a "point within shape" test, it would 
be a nice feature to extend that to "overlap shapes".

(Actually, I'd prefer that "intersect" be changed to mean what it says 
(i.e. two shapes overlap), and a new term be devised for "rectangles 
overlap", but I guess that could break too many existing stacks :-)


-- 
Alex Tweedly       http://www.tweedly.net



-- 
No virus found in this outgoing message.
Checked by AVG Anti-Virus.
Version: 7.0.323 / Virus Database: 267.8.2/29 - Release Date: 27/06/2005




More information about the use-livecode mailing list