Einzelnen Beitrag anzeigen

Benutzerbild von igel457
igel457

Registriert seit: 31. Aug 2005
1.622 Beiträge
 
FreePascal / Lazarus
 
#9

Re: Kollision zweier 2dim Polygonen.

  Alt 8. Dez 2006, 15:54
Wie wäre es damit? Ich hatte schonmal das selbe Problem...

http://www.coding-board.de/board/sho...6002#post96002

EDIT: Ich habe den Code mal hier her kopiert, um toten Links vorzubeugen:

Delphi-Quellcode:
type
  TPointArray = array of TPoint;

function PointInPolygon(const Polygon : TPointArray; const P : TPoint): boolean;
var
  ToTheLeftofPoint, ToTheRightofPoint : byte;
  np : integer;
  OpenPolygon : boolean;
  XIntersection : real;
begin
  ToTheLeftofPoint := 0;
  ToTheRightofPoint := 0;
  OpenPolygon := False;

  if not ((Polygon[0].X = Polygon[High(Polygon)].X) and
   (Polygon[0].Y = Polygon[High(Polygon)].Y)) then
   OpenPolygon := True;

  for np := 1 to High(Polygon) do
   if ((Polygon[np - 1].Y <= P.Y) and
     (Polygon[np].Y > P.Y)) or
     ((Polygon[np - 1].Y > P.Y) and
     (Polygon[np].Y <= P.Y)) then
   begin
     XIntersection := Polygon[np - 1].X +
      ((Polygon[np].X - Polygon[np - 1].X) /
      (Polygon[np].Y - Polygon[np - 1].Y)) * (P.Y - Polygon[np - 1].Y);

     if XIntersection < P.X then Inc(ToTheLeftofPoint);
     if XIntersection > P.X then Inc(ToTheRightofPoint);
   end;

  if OpenPolygon then
  begin
   np := High(Polygon);
   if ((Polygon[np].Y <= P.Y) and
     (Polygon[0].Y > P.Y)) or
     ((Polygon[np].Y > P.Y) and
     (Polygon[0].Y <= P.Y)) then
   begin
     XIntersection := Polygon[np].X +
      ((Polygon[0].X - Polygon[np].X) /
      (Polygon[0].Y - Polygon[np].Y)) * (P.Y - Polygon[np].Y);

     if XIntersection < P.X then Inc(ToTheLeftofPoint);
     if XIntersection > P.X then Inc(ToTheRightofPoint);
   end;
  end;

  if (ToTheLeftofPoint mod 2 = 1) and (ToTheRightofPoint mod 2 = 1) then
   Result := True
  else
   Result := False;
end;
Andreas
"Sollen sich auch alle schämen, die gedankenlos sich der Wunder der Wissenschaft und Technik bedienen, und nicht mehr davon geistig erfasst haben als die Kuh von der Botanik der Pflanzen, die sie mit Wohlbehagen frisst." - Albert Einstein
  Mit Zitat antworten Zitat