Registriert seit: 31. Aug 2005
1.622 Beiträge
FreePascal / Lazarus
|
Re: Kollision zweier 2dim Polygonen.
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
|