Polygons & Nodal Points...
cabney
cabney at cyberpass.net
Mon Jul 16 01:42:43 CDT 2001
~sdpm~
On Sun, 15 Jul 2001 schoon at amgt.com wrote:
> Yes, this is true, using a ray... But it fails when a point is right on
> a boundary, and the polygon is odd shaped which would make an even
> amount of crossings... Still a valid point, but fails the test...
K, i have to admit... you need to handle when you are leaving the
polyon and your y-value is on the edge:
sub in_poly
{
# @isect are x,y quads from the polygon that cross at x
my ($x, $y, @isect) = @_;
return "hit!" if is_node($x,$y, at isect);
my $c = 0;
# slice gives you y at x for each x,y quad
my @ladder = slice ($x, @isect);
@ladder = sort {$a <=> $b} @ladder;
while (@ladder)
{
my $rung = shift @ladder;
if ( $y == $rung ) {
unless ($c % 2) { $c-- }
last;
}
last if ( $y < $rung );
$c++;
}
return ($c % 2) ? "hit!" : "miss!";
}
CA
--
There was a time
A wind that blew so young
For this could be the biggest sky
And I could have the faintest idea
~sdpm~
The posting address is: san-diego-pm-list at hfb.pm.org
List requests should be sent to: majordomo at hfb.pm.org
If you ever want to remove yourself from this mailing list,
you can send mail to <majordomo at happyfunball.pm.org> with the following
command in the body of your email message:
unsubscribe san-diego-pm-list
If you ever need to get in contact with the owner of the list,
(if you have trouble unsubscribing, or have questions about the
list itself) send email to <owner-san-diego-pm-list at happyfunball.pm.org> .
This is the general rule for most mailing lists when you need
to contact a human.
More information about the San-Diego-pm
mailing list