beiliegende Prozedur ist recht flott, ich verwende sie im Mousemove um Hitregions vorzuselektieren (TPointFDynArray nur weil ich es mit
GDI+ verwende, ein normales PointArray tut es auch)
Delphi-Quellcode:
function PointInPolygon(const Points: TPointFDynArray; X, Y: Integer): Boolean;
var
Count, K, J: Integer;
begin
Result := False;
J := High(Points);
for K := 0 to High(Points) 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 ((Points[J].Y - Points[K].Y)<>0) and (X < (Points[J].X - Points[K].X) * (Y - Points[K].Y) / (Points[J].Y - Points[K].Y) + Points[K].X) then
begin
Result := not Result;
end;
end;
J := K;
end;
end;