AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia "Hit Test" im Polygon mittels PtInRegion

"Hit Test" im Polygon mittels PtInRegion

Ein Thema von soulies · begonnen am 22. Jun 2010 · letzter Beitrag vom 22. Jun 2010
Antwort Antwort
soulies

Registriert seit: 9. Dez 2005
234 Beiträge
 
#1

"Hit Test" im Polygon mittels PtInRegion

  Alt 22. Jun 2010, 07:35
hoi,

ich speicher in einem array die eckpunkte eines polygons. array of TPointfloat Mit einem Messgerät nehme ich Punkte auf und will diese nun vergleichen ob sie sich innerhalb
des polygons befinden. (die Messpunkte sind auch vom Typ TPointfloat)

Zum überprüfen habe ich folgende Funktion gefunden:
Delphi-Quellcode:
function PtInPolygon(const x,y : integer; aPolygon: array of TPoint): boolean;
var
  PolyHandle: hRgn;
begin
  PolyHandle := CreatePolygonRgn(aPolygon[0], Length(aPolygon), Winding);
  result := PtInRegion(PolyHandle,X,Y);
  DeleteObject(PolyHandle);
end;
Frage: Ist es überhaupt möglich mit "CreatePolygonRgn" mein Polygon zu beschreiben ?
Wenn ja - wie löse ich am effektivsten die Typumwandlung von TPointfloat zu TPoint,
wenn nein - welche Alternativen hätte ich ?

Eine kleine Zeichnung zur Veranschaulichung hängt mit dran.

cya
Miniaturansicht angehängter Grafiken
kontur.png  
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
8.942 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: "Hit Test" im Polygon mittels PtInRegion

  Alt 22. Jun 2010, 07:53
Du musst sowohl dein Polygon als auch die Messpunkte in Integer-Werte umwandeln. Wenn dir der damit enstehende Genauigkeitsverlust egal ist, kannst du dieses Verfahren anwenden.

Aus Performancegründen solltest du allerdings die PolygonRgn nur einmal erzeugen und dann immer nur PtInRgn aufrufen.

Zur Umwandlung von TPointFloat zu TPoint: Ermittle den möglichen Bereich der Messpunkte und mappe den auf den erlaubten Bereich von TPoint. Ich bin mir nicht sicher, ob wirklich der gesamte Integer-Bereich zulässig ist. Zumindest bei Win95/98/Me war das jedenfallls nicht so. Es ist dabei übrigens egal, ob du die X- und Y-Koordinaten mit den gleichen Faktoren umrechnest. Da du nur mit geraden Linien arbeitest, würde auch bei einer Verzerrung das richtige herauskommen.
Uwe Raabe
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:33 Uhr.
Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf