[fpc-pascal] C translation question
    José Mejuto 
    joshyfun at gmail.com
       
    Sat Oct 22 12:44:44 CEST 2016
    
    
  
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;
-- 
    
    
More information about the fpc-pascal
mailing list