Geometry in Pascal
From Free Pascal wiki
Revision as of 17:37, 27 September 2010 by Sekelsenmat (talk | contribs) (New page: ==Checking if a point is inside a polygon (integer version)== <delphi> // The function will return True if the point x,y is inside the polygon, or // False if it is not. // // Original...)
Checking if a point is inside a polygon (integer version)
<delphi> // The function will return True if the point x,y is inside the polygon, or // False if it is not. // // Original C code: http://www.visibone.com/inpoly/inpoly.c.txt // // Translation from C by Felipe Monteiro de Carvalho // // License: Public Domain function IsPointInPolygon(AX, AY: Integer; APolygon: array of TPoint): Boolean; var
xnew, ynew: Cardinal; xold,yold: Cardinal; x1,y1: Cardinal; x2,y2: Cardinal; i, npoints: Integer; inside: Integer = 0;
begin
Result := False; npoints := Length(APolygon); if (npoints < 3) then Exit; xold := APolygon[npoints-1].X; yold := APolygon[npoints-1].Y; for i := 0 to npoints - 1 do begin xnew := APolygon[i].X; ynew := APolygon[i].Y; if (xnew > xold) then begin x1:=xold; x2:=xnew; y1:=yold; y2:=ynew; end else begin x1:=xnew; x2:=xold; y1:=ynew; y2:=yold; end; if (((xnew < AX) = (AX <= xold)) // edge "open" at left end and ((AY-y1)*(x2-x1) < (y2-y1)*(AX-x1))) then begin inside := not inside; end; xold:=xnew; yold:=ynew; end; Result := inside <> 0;
end; </delphi>