Hallo!
Folgender Code stammt aus der guten alten GLScene-Library (aus der
Geometry-Unit einer schon älteren Version, weiß nicht, ob in der aktuellen vielleicht sogar was schnelleres ist). Ich weiß auch nicht, ob er Deinen Anforderungen genügt (nicht-konvexe Vielecke). Außerdem erfordert er in der vorliegenden Version eine andere Form der Parameter (zwei Arrays statt TPoints).
GLScene ist unter der MPL veröffentlicht, siehe
glscene.sf.net.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| function PointInPolygon(var xp, yp : array of Single; x, y: Single) : Boolean; var I, J: Integer; begin Result:=False; if High(XP)=High(YP) then begin J:=High(XP); for I:=0 to High(XP) do begin if ((((YP[I]<=Y) and (Y<YP[J])) or ((YP[J]<=Y) and (Y<YP[I])) ) and (X<(XP[J]-XP[I])*(Y-YP[I])/(YP[J]-YP[I])+XP[I])) then Result:=not Result; J:=I; end; end; end; |
In the beginning, the universe was created. This has made a lot of people very angry, and is generally considered to have been a bad move.