Hallo Zusammen,
Ich möchte gerne die Fläche mehrerer Polygone berechnen. Konkret handelt
es sich um eine Weltkarte, alle physischen Kontinente und Inseln liegen
mir als einzelne Pfade (Liste aus Punkten) vor. Das sind ca. 3000 Pfade
die alle geschlossen sind. Nun würde ich gerne jeweils deren Fläche
ausrechnen. (Karten-Projektion bzw. Tatsächlich Fläche sind mir egal).
Ich habe also mal die Gaußsche Trapezformel angesetzt. Bei einfachen
Polygonen funktioniert das auch wunderbar, bei anderen/komplexeren kommt
da nur blödsinn raus. Meine Vermutung geht dahin, dass die Trapezformel
eine "saubere" Mittellinie braucht ... das kann ich aber nicht
gewährleisten bei den komplexen Formen der Kontinente. Leider bin ich
kein Mathematiker. Kann mir das jemand erklären?
Jetzt suche ich also eine besser Variante für die Berechnung der
Polygonfläche. Hat jemand Links für mich oder sogar pseudocode / Python
?
Danke
Hach waren das Zeiten ... als mein Objekt durch die selbst erstellte
Höhenkarte lief!
Doch plötzlich versank sie an genau einer Stelle ein Drittel im Boden
... seither zweifele ich ein wenig an den Berechnungen mit Dreiecken
:-)
Ich nehme an, die Koordinaten der Eckpunkte sind gegeben. Dann ist es
ganz einfach und in zwei oder drei Codezeilen programmiert:
https://de.wikipedia.org/wiki/Polygon#Fl.C3.A4che
Edit:
Ah, die hast du ja schon ohne Erfolg programmiert. Dann hast du entweder
etwas falsch gemacht, oder es sind so viele Punkte, dass sich
Rundungsfehler bemerkbar machen.
Hast du ein Beispiel für so ein Polygon und dem von dir berechneten
Ergebnis? Dann kann ich schauen, ob ich etwas anderes herausbekomme.
Edit 2:
Michi schrieb:> Meine Vermutung geht dahin, dass die Trapezformel> eine "saubere" Mittellinie braucht ... das kann ich aber nicht> gewährleisten bei den komplexen Formen der Kontinente.
Nein, die Formel funktioniert für beliebige Polygone, wenn man sie
richtig anwendet, sogar für Polygone mit Löchern.
> Konkret handelt> es sich um eine Weltkarte, alle physischen Kontinente und Inseln liegen> mir als einzelne Pfade (Liste aus Punkten) vor.
Ich hätte auch gern solche Daten, am liebsten in verschiedenen
Auflösungen: z.b. grob mal 500..1000km pro Segment (o. kl. Inseln)
Dann vllt. 10x/100x/1000x besser aufgelöst (bloss Richtangaben, bin
flexibel. Koordinatensystem übrigens auch egal).
Wo gibt es solche Perimeterdaten frei?
Yalu X. schrieb:> Ah, die hast du ja schon ohne Erfolg programmiert. Dann hast du entweder> etwas falsch gemacht, oder es sind so viele Punkte, dass sich> Rundungsfehler bemerkbar machen.
Meine Implementierung wäre
Michi schrieb:> wie hättest du die> Daten denn gerne? CSV? Irgendwie speziell formatiert?
Egal. Irgendwie so, dass man sie auch mit den Augen lesen kann.
Yalu X. schrieb:> Michi schrieb:>> wie hättest du die>> Daten denn gerne? CSV? Irgendwie speziell formatiert?>> Egal. Irgendwie so, dass man sie auch mit den Augen lesen kann.
Habs dir angehängt -- vielen Dank für deine Hilfe
Ich bekomme mit deinem Code (der korrekt aussieht)
16987844.326731376
heraus, was durchaus plausibel ist. Bist du sicher, dass du die
Zahlenwerte richtig einliest und auch das richtige Ergebnis ausgibst (es
werden ja mehrere Flächen berechnet).
Ich korrigiere mal meinen Python Code von weiter oben. War natürlich ein
Fehler in der Programmierung meinerseits. Es ist eine Einrückung, die
Halbierung der Fläche darf nur am Ende der Summe gemacht werden und
nicht bei jedem neuen Punkt.
Richtig also:
Yalu X. schrieb:> Ich bekomme mit deinem Code (der korrekt aussieht)>> 16987844.326731376Michi schrieb:> Ich korrigiere mal meinen Python Code von weiter oben. War natürlich ein> Fehler in der Programmierung meinerseits. Es ist eine Einrückung, ...
Upps, das hätte ich eigentlich beim Austesten bemerken müssen.
Dass ich den Fehler übersehen habe, liegt daran, dass ich beim Kopieren
deines Codes unbewusst die Einrückungstiefe an meine Gewohnheiten (2
Leerzeichen pro Ebene) angepasst und dabei ich intuitiv die falsche
Einrückung der betreffenden Zeile korrigiert habe.
Eine eigene Frage?
Dieser Thread ist über 9 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.