Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

17.07.2014, 18:15

Punkt innerhalb von Polygon

Nachdem ich mein letztes geometrisches Problem gelöst habe, folgt direkt das Nächste.

Ich möchte herausfinden, ob ein Punkt innerhalb eines Polygons liegt.
Bei ersten Recherchen fand ich auch direkt eine tolle Lösung:
Man iteriert durch alle Strecken des Polygons und prüft ob der Punkt entweder rechts oder links liegt.
Toll, hat funktioniert, nur nach weiterer Überlegung dann doch zu wenig!
Das Ganze funktioniert nur so lange, wie das Polygon konvex ist. Ist es konkav ist die Prüfung nicht zu gebrauchen.

Also habe ich weiter gesucht.
Die nächste Lösung war, einen random Punkt außerhalb des Polygons zu nehmen und diesen mit dem anderen Punkt zu einer Strecke zu verbinden.
Wenn eine ungerade Anzahl an Schnittpunkten vorliegt, ist der Punkt innerhalb, wenn gerade (oder 0) ist er außerhalb.
Allerdings konnte ich an mehreren Stellen lesen, das dies zu Ungenauigkeiten führen kann. Warum dem so ist, konnte ich nicht herausfinden.

Die 3. Lösung ist die bei weitem komplex este.
Man unterteilt das Polygon in Dreiecke und prüft ob der Punkt innerhalb eines dieser Dreiecke liegt.
Das hört sich soweit ganz gut an, nur kann sich das Ganze auch sehr schnell zu einem sehr komplexen Laufzeitverhalten entwickeln.

Ich präferiere Methode 2, allerdings würde mich interessieren, warum davon abgeraten wird? Bestimmt hatte jemand schon ähnliche Gedanken ;)

mfg

PS: Was ist an "komplex este" falsch (natürlich zusammen geschrieben)?

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

2

17.07.2014, 18:22

Ungenauigkeiten hast Du dann, wenn Deine Test-Linie durch Schnittpunkte zweier anliegenden Kanten (sprich durch einen Vertex oder sehr nahe dran) verläuft. Dann hast Du eventuell einen Schnittpunkt mehr, als da eigentlich vorliegt. Oder bei einer Spitze mit Passante vielleicht gar keinen.

Andere Frage: Wieso hast Du konkave Polygone? Das ist schon eher selten irgendwie.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

3

17.07.2014, 18:35

Ok, klingt einleuchtend, also immer einen 2. oder 3. Test nach schieben? Oder wie kann man da ran gehen?

Zu deiner Frage:
An sich habe ich keine konkaven Polygone, aber ich biete in meiner Library die Möglichkeit welche zu nutzen. Dabei werden aber Sonderfälle wie überschlagende Polygone oder Polygone mit Löchern ausgeschlossen.

birdfreeyahoo

Alter Hase

Beiträge: 756

Wohnort: Schorndorf

Beruf: Junior Software Engineer

  • Private Nachricht senden

4

17.07.2014, 20:04

Also bei manchen Engines ist es so, dass du konvexe Collision-Bodies machen kannst, bei konkaven muss man immer besonderes beachten oder so, also die Lösung für konvexe kannst du begrenzt einsetzen.

Werbeanzeige