Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: Pascal: Geometriaa: onko piste kuvion sisällä?

Janezki [18.06.2005 10:08:39]

#

Näitähän jokainen koodari tarvitsee jossain elämän vaiheessa. Kaikki kolme funktiota palauttavat boolean -arvon True, jos piste on kuvion sisäpuolella tai sen kehällä.

PointInRect: Piste suorakulmion sisällä. Parametrit Point(kysytty piste); Rect(Suorakulmio)

PtInPoly: Piste monikulmion sisällä. Parametrit const Points: (Taulukko monikulmion pisteistä); X,Y: (Kysytty piste)

PtInPoly löytyi täältä: http://www.delphi.about.com/

PointInCircle: Piste ympyrän sisällä. Parametrit PPointCoords, PCircleCoords: (Pisteen ja ympyrän koordinaatit); PRadius: (Ympyrän säde)

function PointInRect(Point: Tpoint; Rect: Trect): Boolean;
begin
 if (Point.X > Rect.TopLeft.X) and
  (Point.Y > Rect.TopLeft.Y) and
   (Point.X < Rect.BottomRight.X) and
    (Point.Y < Rect.BottomRight.Y) then
     PointInRect := True
 else
  PointInRect := False;
end;
function PtInPoly(const Points: Array of TPoint; X,Y: Integer): Boolean;
var
 Count, K, J : Integer;
begin
  Result := False;
  Count := Length(Points);
  J := Count-1;
  for K := 0 to Count-1 do begin
   if ((Points[K].Y <=Y) and (Y < Points[J].Y)) or
      ((Points[J].Y <=Y) and (Y < Points[K].Y)) then
   begin
    if (x < (Points[j].X - Points[K].X) *
       (y - Points[K].Y) /
       (Points[j].Y - Points[K].Y) + Points[K].X) then
        Result := not Result;
    end;
    J := K;
  end;
end;
function  PointInCircle(PPointCoords, PCircleCoords: TRealPoint; PRadius: Word): Boolean;
begin
 if Hypot(PPointCoords.X - PCircleCoords.X,PPointCoords.Y - PCircleCoords.Y) <= PRadius then
  Result := True
 else
  Result := False;
end;

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta