php.de

Zurück   php.de > php.de Intern > Off-Topic Diskussionen

Off-Topic Diskussionen Mach mal Pause vom Programmieren!

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 03.01.2006, 17:39  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard Punkt in Polygon

Hallo,

ich möchte per Funktion berechnen ob sich ein Punkt P innerhalb eines Polygons befindet.
Ein Polygon definiere ich als eine Liste von Punkten (ich nenne es mal "Polygon-Punktliste"), welche nacheinander mit Linien verbunden sind. Ich verzichte extra auf das Wort Kante.

Ich habe eine Lösung (nicht ohne Hilfe) gefunden von der ich glaube, dass sie richtig ist und würde gern wissen, ob der Gedanke alle Fälle abdeckt.
Vielleicht macht sich der ein oder andere der Lust hat das ganze auf Papier anschaulich, ist dann wesentlich einfacher zu verstehen.

Ich ziehe von dem Punkt P eine Linie zu einem Punkt, der garantiert außerhalb des Polygons liegt (schonmal ein Schwachpunkt *1). Zum Beispiel Q(MAX_INT, P.y). Es ensteht also eine waagerechte Linie von P nach Q.
Nun zähle und vergleiche ich alle Schnittpunkte zwischen der Linie PQ und den Polygon Linien. Bei den Schnittpunkten, die _nicht_ Teil der Polygon-Punktliste sind (also keine Polygon-Ecken sind) zähle ich den Zähler um 1 hoch, sonst nicht, denn dann habe ich eine Ecke erwischt und befinde mich noch in dem Raum (innen/außen) wo ich mich vor der "Kollision" befand.
Ist der Zähler am Ende gerade, befindet sich Punkt P außerhalb des Polygons, bei ungerader Anzahl befindet er sich innerhalb.

Wandere ich vom Punkt Q der garantiert außerhalb liegt zum Punkt P und kreuze nur eine Polygon-Linie, befinde ich mich danach innerhalb des Polygons, durchstoße ich die nächste bin ich wieder außerhalb usw.

Die Frage ist, habe ich alle Möglichkeiten abgedeckt, bzw. was wären Spezialfälle?
- Die PQ-Linie stimmt mit einer Polygon-Linie überein. Ist nicht relevant mit meinem Lösungsgedanken oder?
- Punkt P ist eine Ecke des Polygons (sehe gerade, dieser Fall wäre schonmal nicht abgedeckt und müsste wohl extra behandelt werden)
- Was ist mit Polygonen die sich selbst schneiden ("8"er-Form)

*1) Vielleicht könnte ich MAX_INT durch MAX(alle x-Werte der Polygon-Punkte) + 1 definieren.
Zergling-new ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 03.01.2006, 18:06  
da schreibt der ElePHPant
 
Benutzerbild von Flor1an
 
Registriert seit: 18.06.2008
Beiträge: 8.903
PHP-Kenntnisse:
Fortgeschritten
Flor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer Anblick
Standard

Naja wenn du jetzt theoretisch nen Polygon hast und dann innen noch nen weiteren Punkt der selbst zum Polygon gehört zieht er ja auch Linien bzw. Flächen im Polygon. Daher könnte doch deine "waagerechte" theoretisch durch 2 Flächen gehen und trozdem im Polygon sein!

Eigentlich ist doch ein Polygon im Sinne von Modellen etc. beim PC gebilde die weder konkav seien können noch das sich Flächen schneiden ("8"er-Form).

Inwiefern brauchst du denn so eine Überprüfung? Vlt lässt sich das ganze ja ganz anders lösen.

*edit*

Übrigens hast du ja gemeint dein Polygon besteht aus lauter Linien ... eigentlich besteht es doch aus lauter Flächen oder? Und du müsstest doch die Schnittpunkte zwischen den einzelnen Flächen und der Linie PQ berechnen?!?

Und die Berechnung zwischen Fläche und Strecke (um PQ mal mathematisch auszudrücken) dürfte sich nicht sehr einfach gestallten. Mathematisch gesehen is es ja nich das Problem nur woher weißte denn zwischen welchen Punkten es eine Fläche gibt und zwischen welchen nicht. Stell dir Quader vor! Da haste 6 Flächen außen und dann nochmal diese "Diagonal" Flächen wie auch immer die durch die Mitte gehen.
Flor1an ist offline   Mit Zitat antworten
Alt 03.01.2006, 18:21  
Moderator
 
Benutzerbild von agrajag
 
Registriert seit: 02.10.2006
Beiträge: 3.820
PHP-Kenntnisse:
Fortgeschritten
agrajag wird schon bald berühmt werdenagrajag wird schon bald berühmt werden
Standard

Ich hätte ganz spontan gesagt:

Leg eine waagrechte und eine senkrechte Linie durch den Punk und zähle dann die Schnittpunkte mit den Linien zwischen den einzelnen Punkten. Ist die Anzahl beidemale gerade ist alles ok. Ist sie ungerade prüfe ob der Punkt auf einer der Linien liegt.

Eigentlich genau wie deine Lösung nur doppelt soviele Berechnungen
__________________
Today you...Tomorrow me.
agrajag ist offline   Mit Zitat antworten
Alt 03.01.2006, 18:34  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Zitat:
Zitat von RaZoR
Inwiefern brauchst du denn so eine Überprüfung? Vlt lässt sich das ganze ja ganz anders lösen.
[..]
Übrigens hast du ja gemeint dein Polygon besteht aus lauter Linien ... eigentlich besteht es doch aus lauter Flächen oder? Und du müsstest doch die Schnittpunkte zwischen den einzelnen Flächen und der Linie PQ berechnen?!?
Hallo, erstmal danke dass du dir Zeit genommen hast.
Die Überprüfung ist Teil eines Unit-Tests.
Diese Funktionen berechnen Schnittpunkte und -Linien zwischen Punkten, Ellipsen, Linien oder Polygonen.
Ich soll nun deren Korrektheit überprüfen.

Mit Polygon meine ich keine Ansammlung dreieckiger Flächen, sondern eine Fläche, begrenzt durch die Linien zwischen "nebeneinander" liegenden Punkten. Ich bin jetzt zu hause, kann also mal mit Photoshop was basteln


Schwarz = Punkte des Polygons
Rot = "Linien des Polygons"
P = Jackpot, innerhalb oder außerhalb
Q = garantiert außerhalb befindlicher Punkt

Wenns natürlich ne andere Art gibt es herauszufinden oder wenn du es anders lösen würdest nur her damit


Edit: @Werbegeschenk: Kann ich überhaupt berechnen ob sich eine unendliche Gerade mit einer endlichen Strecke kreuzt?
Zergling-new ist offline   Mit Zitat antworten
Alt 03.01.2006, 20:23  
da schreibt der ElePHPant
 
Benutzerbild von Flor1an
 
Registriert seit: 18.06.2008
Beiträge: 8.903
PHP-Kenntnisse:
Fortgeschritten
Flor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer Anblick
Standard

Zitat:
Edit: @Werbegeschenk: Kann ich überhaupt berechnen ob sich eine unendliche Gerade mit einer endlichen Strecke kreuzt?
Solang du den Richtungsvektor oder zwei Punkte kennst ist das kein Problem!

Danke für die Zeichnung, ich dachte du meinst Gebilde in 3D aber bei 2D ist es bissl einfacher.

Du hast gemeint du zählst die Ecken nicht mit .... angenommen der Punkt der nahe an Q liegt würde auf der blauen Linie sein! Dann hättest du als Counter 2 ... aber der Punkt ist innen im Polygon!

Ich glaub des wird wirklich schwierig. Du könntest theoretisch den Punkt Q so wählen das kein Polygonpunkt auf PQ liegt damit ist auch ausgeschlossen das PQ mit einer Strecke des Polygons zusammenfällt. Dann würde dein Lösungsvorschlag funktionieren würd ich jetzt sagen. Aber müsstest halt ausschließen dass eine Ecke auf PQ liegt.
Flor1an ist offline   Mit Zitat antworten
Alt 03.01.2006, 20:31  
Erfahrener Benutzer
 
Registriert seit: 18.09.2003
Beiträge: 13.598
PHP-Kenntnisse:
Fortgeschritten
imported_Ben ist zur Zeit noch ein unbeschriebenes Blatt
Standard

http://www.acm.org/pubs/tog/editors/erich/ptinpoly/
Vielleicht hilft es.

Den Link habsch ma von 'nem Kommilitonen erhalten. Ist schon was länger her .. aber hat mir diesbzgl. weitergeholfen.
imported_Ben ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

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 an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] Punkt in Betrag setzen. saitho PHP Tipps 2008 11 20.07.2008 19:01
BB Code - Links mit abschließendem Punkt brian johnson Off-Topic Diskussionen 10 24.04.2008 20:18
punkt in vari überprüfen SteiniKeule PHP Tipps 2008 10 09.04.2008 22:06
Aus dem Weltall auf einen Punkt snatch-ic Off-Topic Diskussionen 7 29.04.2007 19:28
Mod Rewrite Problem mit PUNKT becks123 Server, Hosting und Workstations 1 31.01.2007 21:48
Punkt in Komma umwandeln MAD King PHP Tipps 2006 14 24.04.2006 19:43
decimal : punkt zu komma konvertieren Das Devil PHP Tipps 2006 2 20.04.2006 11:39
Komma in Punkt wandeln Markus Biehl PHP Tipps 2006 5 10.02.2006 14:48
JS: Punkt in Komma umwandeln dj-digger HTML, Usability und Barrierefreiheit 6 02.02.2006 12:52
Polygon Imagemap Generator? HTML, Usability und Barrierefreiheit 11 20.01.2006 23:11
komma statt punkt in berechnung Sclot HTML, Usability und Barrierefreiheit 8 27.12.2005 19:11
Punkt in Zahl - Sollte aber Komma sein! CHRIS PHP Tipps 2005-2 10 03.10.2005 16:57
Punkt und Komma-Problem beim Rechnen mit Zahlen thomaspk PHP Tipps 2005 3 31.03.2005 19:59
punkt durch komma ersetzen? PHP Tipps 2005 11 04.03.2005 21:41
Text an einen bestimmten Punkt innerhalb der Grafik setzen HTML, Usability und Barrierefreiheit 2 02.03.2005 18:46

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
punkt in fläche, punkt in polygon, php polygon, punkt im polygon, punkt in einer fläche, polygon php, punkt auf fläche, php punkt in polygon, punkt in polygon php, punkt innerhalb polygon, punkt in fläche bestimmen, ist punkt in fläche, punkt in fläche berechnen, punkt in flaeche, punkt-in-polygon-problem, php polygone, punkt innerhalb eines polygons, polygon punkt innerhalb, punkt in einem polygon, liegt ein punkt auf einer fläche

Alle Zeitangaben in WEZ +2. Es ist jetzt 13:01 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.