El 22/10/2016 a las 11:59, Ryan Joseph escribió:
j := i + 1;
might want this at the end of the loop.
Doing that defiantly broke it. I think “j” is being set inside the for()
construct and before each pass of the loop. The author explains the for loop
even but the fact it requires an explanation makes my worry about how easy it
is to mess up. :)
Hello,
It is at the end of the loop for sure, it points to the "previous" point
in the polygon and in the case of the first testing point the "previous"
one is the last one.
So the correct code is:
j := i;
This is my automated C code conversion for that function:
function pnpoly(nvert: Integer; vertx: PointerTo_Single; verty:
PointerTo_Single; testx: Single; testy: Single): Integer;
var
c: Integer = 0;
j: Integer = 0;
i: Integer = 0;
begin
{INITCODE} c := 0;
{INITCODE} j := 0;
{INITCODE} i := 0;
i := 0;
j := nvert - 1;
while i < nvert do
begin
if IsTrue(IsTrue(((verty[i] > testy) <> (verty[j] > testy)))
AND
IsTrue((testx < (vertx[j] - vertx[i]) * (testy - verty[i])
div (verty[j] - verty[i]) + vertx[i]))) then
begin
c := BooleanNot (c);
end;
j := PostInc(i);
end;
exit (c);
end;
--
_______________________________________________
fpc-pascal maillist - fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal