Polygon Prüfung ob innerhalb geklickt wurde
-
- Beiträge: 35
- Registriert: Mo 1. Jul 2013, 21:30
- OS, Lazarus, FPC: Win 7 Laz 1.0.10
- CPU-Target: 32 Bit
- Wohnort: Leipzig
Polygon Prüfung ob innerhalb geklickt wurde
Ich brauch mal nen Gedankenanstoss,
wie ist es möglich, in einen Bereich auf einer Canvas zu klicken und zu prüfen, ob innerhalb des N-Ecks geklickt wurde?
Ob in ein Dreieck oder Viereck geklickt wurde ist ja relativ simpel.........
Meine Idee wäre, vom "Klick Punkt" der Maus jeweils in min 3 Richtungen zu prüfen ob die Pixelfarbe der "Umrandungsfarbe" des Polygons entspricht...
Eine andere Idee wäre nen 2d Array of Boolean, sprich jede Koordinate innerhalb des Polygon ist true....ich halte das jedoch recht unschön....
oder ist es besser das Polygon als Objekt zu erzeugen....? (da fehlt mir der Ansatz)
wie ist es möglich, in einen Bereich auf einer Canvas zu klicken und zu prüfen, ob innerhalb des N-Ecks geklickt wurde?
Ob in ein Dreieck oder Viereck geklickt wurde ist ja relativ simpel.........
Meine Idee wäre, vom "Klick Punkt" der Maus jeweils in min 3 Richtungen zu prüfen ob die Pixelfarbe der "Umrandungsfarbe" des Polygons entspricht...
Eine andere Idee wäre nen 2d Array of Boolean, sprich jede Koordinate innerhalb des Polygon ist true....ich halte das jedoch recht unschön....
oder ist es besser das Polygon als Objekt zu erzeugen....? (da fehlt mir der Ansatz)
Re: Polygon Prüfung ob innerhalb geklickt wurde
Durch den Testpunkt P eine horizontale Gerade legen und z.b. nach rechts verfolgen. Die Schnittpunkte dieser Halbgeraden mit jeder Polygonkante ermitteln. Bei einer ungeraden Anzahl von Schnittpunkten ist der Punkt im, bei einer geraden Anzahl außerhalb des Polygons.
http://de.wikipedia.org/wiki/Punkt-in-P ... ach_Jordan
http://de.wikipedia.org/wiki/Punkt-in-P ... ach_Jordan
-
- Beiträge: 35
- Registriert: Mo 1. Jul 2013, 21:30
- OS, Lazarus, FPC: Win 7 Laz 1.0.10
- CPU-Target: 32 Bit
- Wohnort: Leipzig
Re: Polygon Prüfung ob innerhalb geklickt wurde
Mit was prüfe ich die "Überschreitung" der Grenze?....Farbe der Linie, Farber des Pixels
-
- Beiträge: 340
- Registriert: Di 12. Sep 2006, 08:57
- OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
- CPU-Target: xxBit
- Kontaktdaten:
Re: Polygon Prüfung ob innerhalb geklickt wurde
Aus der Spiele-Entwicklung kenne ich das Verfahren, dass man zuerst prüft, ob die Maus innerhalb der Bounding-Box deines Polygons liegt, danach Prüft man die "Pixelfarbe" unter der Maus (bzw. ob unter der Maus ein Pixel des Polygons liegt, oder nicht). Das ist ein sehr schnelles Verfahren und kaum Rechenaufwendig.
Grüße, Antrepolit
care only if your os is really burning
care only if your os is really burning
-
- Beiträge: 768
- Registriert: Mo 4. Mai 2009, 13:24
- OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
- CPU-Target: x86_64-linux-qt/gtk2
- Kontaktdaten:
Re: Polygon Prüfung ob innerhalb geklickt wurde
Wie wär's mit PtInRegion()? Die Suchmaschine deiner Wahl liefert Hinweise auf den Gebrauch.
Re: Polygon Prüfung ob innerhalb geklickt wurde
Du sprichst oben von "N-Eck", also hast du n Eckpunkte. Damit ist der Rand des Polygons definiert. "Pixelfarbe" o.ä. braucht man da nicht. In dem von theo zitierten Link ist sogar schon der Algorithmus in Pascal ausformuliert, schau's dir an.Mit was prüfe ich die "Überschreitung" der Grenze?
-
- Beiträge: 35
- Registriert: Mo 1. Jul 2013, 21:30
- OS, Lazarus, FPC: Win 7 Laz 1.0.10
- CPU-Target: 32 Bit
- Wohnort: Leipzig
Re: Polygon Prüfung ob innerhalb geklickt wurde
Danke für die Links und Hilfen!!
-
- Beiträge: 210
- Registriert: Do 24. Jan 2013, 21:22
Re: Polygon Prüfung ob innerhalb geklickt wurde
Hallo,
schon mal an die Methode mit Hilfe von Dreieckflächen gedacht?
Ein N-Eck kann man leicht in Dreicke aufteilen.
Die Dreickflächen kann man nach Heron berechnen.
http://de.wikipedia.org/wiki/Satz_des_Heron
1) Und somit ist die Polygon-Gesamtfläche die Summe der Teildreicke des Polygons.
2) Wenn wir nun einen irgendwo einen Punkt haben, dann können wird von diesem Punkt aus wieder Teil-Dreicke mit den Eckpunkten des
Polygons bilden und deren Teilflächen nach Heron berechnen.
3) Nun prüfen, ob die Summe der Teil-Dreickflächen gleich der Gesamtfläche des Polygons ist, wenn ja ist der Punkt im Polygon.
4) ist die Summe der Teilflächen größer, dann ist der Punkt außerhalb des Polygons.
Das ganze funktioniert auch in der 3D-Welt, ohne darauf achten zu müßen wie das Polygon im Raum steht.
Für das Heronverfahren brauchen wir ja nur die Seiten-Längen der Dreiecke.
Gruß
Frank
schon mal an die Methode mit Hilfe von Dreieckflächen gedacht?
Ein N-Eck kann man leicht in Dreicke aufteilen.
Die Dreickflächen kann man nach Heron berechnen.
http://de.wikipedia.org/wiki/Satz_des_Heron
1) Und somit ist die Polygon-Gesamtfläche die Summe der Teildreicke des Polygons.
2) Wenn wir nun einen irgendwo einen Punkt haben, dann können wird von diesem Punkt aus wieder Teil-Dreicke mit den Eckpunkten des
Polygons bilden und deren Teilflächen nach Heron berechnen.
3) Nun prüfen, ob die Summe der Teil-Dreickflächen gleich der Gesamtfläche des Polygons ist, wenn ja ist der Punkt im Polygon.
4) ist die Summe der Teilflächen größer, dann ist der Punkt außerhalb des Polygons.
Das ganze funktioniert auch in der 3D-Welt, ohne darauf achten zu müßen wie das Polygon im Raum steht.
Für das Heronverfahren brauchen wir ja nur die Seiten-Längen der Dreiecke.
Gruß
Frank
www.flz-vortex.de