Sprachunabhängige Lösung:
GEGEBEN: Ein Polygon kann IMMER aus n-2 Dreiecken bestehen, die sich nicht überlappen (n = Anzahl der Punkte ODER Seiten). 1 Dreieck = 3-seitiges Polygon = 1 Dreieck; 1 Quadrat = 4-seitiges Polygon = 2 Dreiecke; etc ad nauseam QED
Daher kann ein Polygon durch "Abhacken" von Dreiecken reduziert werden, und die Gesamtfläche ist die Summe der Flächen dieser Dreiecke. Versuchen Sie es mit einem Stück Papier und einer Schere. Am besten visualisieren Sie den Vorgang, bevor Sie fortfahren.
Wenn Sie 3 aufeinanderfolgende Punkte in einem Polygonpfad nehmen und mit diesen Punkten ein Dreieck erstellen, haben Sie nur eines von drei möglichen Szenarien:
- Das resultierende Dreieck befindet sich vollständig im ursprünglichen Polygon
- Das resultierende Dreieck liegt vollständig außerhalb des ursprünglichen Polygons
- Das resultierende Dreieck ist teilweise im ursprünglichen Polygon enthalten
Wir sind nur an Fällen interessiert, die in die erste Option fallen (vollständig enthalten).
Jedes Mal, wenn wir eines davon finden, hacken wir es ab, berechnen seine Fläche (einfach, hier wird die Formel nicht erklärt) und erstellen ein neues Polygon mit einer Seite weniger (entspricht dem Polygon mit diesem abgeschnittenen Dreieck). bis wir nur noch ein Dreieck haben.
wie man dies programmatisch umsetzt:
Erstellen Sie ein Array von (aufeinanderfolgenden) Punkten, die den Pfad um das Polygon darstellen. Beginnen Sie bei Punkt 0. Führen Sie das Array aus den Punkten x, x + 1 und x + 2 nacheinander aus. Transformieren Sie jedes Dreieck von einer Form in eine Fläche und schneiden Sie es mit einer aus Polygon erstellten Fläche. WENN der resultierende Schnittpunkt mit dem ursprünglichen Dreieck identisch ist, ist das Dreieck vollständig im Polygon enthalten und kann abgeschnitten werden. Entfernen Sie x + 1 aus dem Array und beginnen Sie erneut mit x = 0. Andernfalls (wenn sich das Dreieck außerhalb des [teilweise oder vollständig] Polygons befindet) zum nächsten Punkt x + 1 im Array wechseln.
Wenn Sie in die Kartierung integrieren möchten und von Geopunkten ausgehen, müssen Sie außerdem ZUERST von Geopunkten in Bildschirmpunkte konvertieren. Dies erfordert die Entscheidung über eine Modellierung und Formel für die Erdform (obwohl wir die Erde eher als Kugel betrachten, handelt es sich tatsächlich um ein unregelmäßiges Ovoid (Eierform) mit Dellen). Es gibt viele Modelle, für weitere Informationen Wiki. Eine wichtige Frage ist, ob Sie den Bereich als eben oder gekrümmt betrachten. Im Allgemeinen erzeugen "kleine" Bereiche, in denen die Punkte bis zu einigen km voneinander entfernt sind, keinen signifikanten Fehler, wenn sie planar und nicht konvex betrachtet werden.