Frage

Ich habe einen Punkt (lat/lon) und einen Übergang in Grad (True North), für den dieser Punkt entlang ist. Ich habe zahlreiche stationäre Polygone (Punkte, die in LAT/LON definiert sind), die konvex sein können oder nicht.

Meine Frage ist, wie ich den nächsten Schnittpunkt, falls vorhanden, mit einem Polygon berechnet habe. Ich habe mehrere verwirrende Beiträge über Ray Tracing gesehen, aber sie scheinen sich alle auf 3D zu beziehen, wenn der Strahl und Polygon nicht auf derselben Ebene sind und auch die Polygone konvex sein müssen.

War es hilfreich?

Lösung 4

Die Antwort auf dieser Seite scheint die genaueste zu sein.

Frage 1.e Godeguru

Andere Tipps

Klingt so, als ob Sie in der Lage sein sollten, eine einfache Kreuzung mit 2D -Linien zu machen ...

Allerdings habe ich mit lat/long zuvor gearbeitet und weiß, dass sie keinem 2D -Koordinatensystem nicht treu sind.

Ich würde mit einer allgemeinen Funktion "ispointinpolygon" beginnen, Sie können eine Million von ihnen durch Googeln finden und sie dann auf Ihren Polys testen, um zu sehen, wie gut es funktioniert. Wenn sie genau genug sind, verwenden Sie das einfach. Es ist jedoch möglich, dass Sie aufgrund der nicht quadratischen Natur von lat/langen Koordinaten einige Modifikationen mithilfe der sphärischen Geometrie vornehmen müssen.

In 2D sind die Berechnungen ziemlich einfach ...

Sie können immer nachsehen, um sicherzustellen, dass sich der Endpunkt des Rays nicht innerhalb des Polygons befindet (da dies in diesem Fall der Schnittpunkt ist).

Wenn der Endpunkt nicht in der Leitung ist, können Sie mit jedem der Grenzmerkmale des Polygons einen Schnittpunkt für Strahlen/Linien durchführen und den am nächsten gelegenen Ort verwenden. Das behandelt konvexe/konkave Funktionen usw.

Berechnen Sie, ob der Strahl jedes Liniensegment im Polygon schneidet mit dieser Technik.

Der resultierende Skalierungsfaktor in (meine akzeptierte) Antwort (die ich angerufen habe h) ist "wie weit der Strahl die Kreuzung ist." Sie suchen nach einem Wert zwischen 0 und 1.

Wenn es mehrere Schnittpunkte gibt, ist das in Ordnung! Wenn Sie das "erste" wollen, verwenden Sie den mit dem kleinsten Wert von h.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top