Difference between revisions of "Geometry in Pascal/fr"

From Free Pascal wiki
Jump to navigationJump to search
m
m (Fixed syntax highlighting)
 
Line 1: Line 1:
 
{{geometry in pascal}}
 
{{geometry in pascal}}
<br><br>
+
 
 
__TOC__
 
__TOC__
  
 
==Contrôle si un point Checking est à l'intérieur d'un polygone (version basée sur les entiers)==
 
==Contrôle si un point Checking est à l'intérieur d'un polygone (version basée sur les entiers)==
  
<syntaxhighlight>
+
<syntaxhighlight lang=pascal>
 
//  La fonction retourne True si le point x,y est dans le polygone, ou False sinon
 
//  La fonction retourne True si le point x,y est dans le polygone, ou False sinon
 
//
 
//

Latest revision as of 11:09, 16 February 2020

Deutsch (de) English (en) français (fr)

Contrôle si un point Checking est à l'intérieur d'un polygone (version basée sur les entiers)

//  La fonction retourne True si le point x,y est dans le polygone, ou False sinon
//
//  Original C code: http://www.visibone.com/inpoly/inpoly.c.txt
//
//  Traduit du langage C par 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))         // bord "ouvert" à l'extrémité gauche
      and ((AY-y1)*(x2-x1) < (y2-y1)*(AX-x1))) then
    begin
      inside := not inside;
    end;
    xold:=xnew;
    yold:=ynew;
  end;
  Result := inside <> 0;
end;

Voir aussi