2010-04-28 7 views
11

Meine Anwendung ist die Darstellung von Formen auf der Erde (mit einer Kugel ist ausreichend) Oberfläche. Dies können Punkte, Linien und Polygone sein. Koordinaten sollten mithilfe von Grad oder Bogenmaß (genau wie geografische Koordinaten) definiert werden.Punkte, Linien und Polygone auf Kugeln mit C/C++

Ein Liniensegment zwischen zwei Punkten auf der Oberfläche der Kugel sollte auf seinem great circle liegen. Polygone sollten aus einer Sammlung solcher Linien bestehen. Außerdem würde ich gerne Set - Basic Operations wie Schnittpunkt, Vereinigung, Differenz, Komplement auf den genannten Formen ausführen. Diese Operationen müssen nur Sammlungen von Punkten ausgeben.

Ich versuchte, das herauszufinden, mit CGAL 3D Spherical Geometry Kernel und 2D Boolean Operations on Nef Polygons Embedded on the Sphere. Eigentlich hatte ich schon Probleme, eine Linie auf die Kugel zu legen. Zusätzlich arbeitet CGAL im Euklidischen Raum, der mich immer noch mit den notwendigen geometrischen Operationen belässt, um mit großen Kreisen auf der Kugel zu arbeiten.

Meine Frage ist, wenn Sie mir helfen können, die in CGAL genannte Funktionalität zu realisieren, oder wenn Sie eine andere Bibliothek für C/C++ empfehlen können, die das tut. Vielen Dank!

+0

Die „2D Boolesche Operationen auf Nef Polygonen auf der Kugel Embedded“ wie es aussieht, tut was du brauchst. Gibt es etwas Spezifisches, mit dem du Hilfe brauchst? – user168715

+0

@ user168715 Ich bin nicht klar mit Ihrer Frage. In der ersten Para müssen Sie Formen auf _surface_ der Kugel zeichnen, aber in 2. para möchten Sie Linien/Polygone auf Großkreis gezeichnet werden (was tatsächlich Linie/Polygon _inside_ der Kugel zeichnen wird). – Pranav

+0

@Pranav: Jede "Linie" des Polygons auf der Oberfläche der Kugel ist ein Stück eines anderen Großkreises. – aschepler

Antwort

1

Ich würde Ihnen vorschlagen, einen Blick auf diese zu nehmen:

http://www.codeguru.com/Cpp/Cpp/algorithms/general/article.php/c5115/

Die Frage 1E löst Ihr Problem der Kreuzung zwischen zwei großen Kreisen. Von diesem können Sie die grundlegende Operation Ihrer Formen auf der Kugel ohne eine große Abhängigkeit wie CGAL oder GEOS definieren.

0

Um die Schnittmenge zweier Objekte zu finden, müssen normalerweise die Gleichungen festgelegt werden, die die Objekte definieren.

Hier ist eine Möglichkeit, die vielleicht nur eine andere Formulierung von Vitors Antwort ist.

Beginnen Sie mit der Definition jeder Linie (Bogen) als parametrische Gleichung. Zum besseren oder schlechteren sehe ich diese Bögen als die Weg normalisierten Vektoren nehmen, wenn sie gedreht werden. So würde ich sie definieren (ich wette, es gibt einen besseren Weg).

Also würde ich die Start- und Endpunkte nehmen, behandeln sie als Vektoren, nehmen Sie dort Kreuzprodukt, um die Drehachse zu erhalten, und dass das Skalarprodukt, um den Winkel zu bekommen.

so meine Gleichung für einen Bogen aussehen

Bogen (t) = startpoint * (axisAngleToRotationMatrix (Achse, t * Winkel))

Sie würden dann die beiden Bögen Gleichung gleich zueinander gesetzt würde und lösen Sie das System von Gleichungen, die sich für die "t" s in jeder Gleichung ergibt.