Wo Douglas-Peucker-Algorithmus (auch Ramer-Douglas-Peucker-Algorithmus ) ist ein Algorithmus zur Kurve glättung im Bereich der vektorgrafik und Generalisierung von Karten. Das Ziel ist, EINEN Durch Eine Folge von Punkten gegebenen Streckenzug Durch weglassen Einzelner Punkte (engl. Jäten) so zu vereinfachen, sterben Dass Grobe Gestalt erhalten bleibt. Der Grad der Vergröberung wird durch Vorfahrt des maximalen Abstands zwischen den Punkten und diesen annähernden EndenZu. Die Ausgangsposition des Algorithmus Wurde von Urs Ramer und (unabhängig) von David Douglas und Thomas Peucker Angegeben.
Algorithmus
Der Algorithmus nahm den Streckenzug als Ganzes (Globaler Ansatz) und Schreitet zu feineren Approximationen fort. Dazu wird die Ausgangfolge geeignet in Two Abschnitte, die den Algorithmus durchlaufen (siehe Rekursion ). Dort Algorithmus realisiert den einen Ansatz nach dem Prinzip Teile und Herrsche .
Gegeben ist der Ausgangsstreckenzug (Bild 0) als Folge von n- Punkten
- {\ displaystyle K = (P_ {1}, \ Punkte, P_ {i}, \ Punkte, P_ {n})}
Sowie der Toleranz {\ displaystyle \ varepsilon> 0}.
Als Annäherung von K wird de Strecke{\ displaystyle {\ Überschrift {P_ {1} \, P_ {n}}}}aus erstem und letztem Punkt betrachtet, a in Bild 1. Über zu prüfen, ob diese Näherung ausreicht, wird unter den{\ displaystyle n-2}Innerer Punkt der K derWo Point{\ displaystyle P_ {m}} gesucht haben, die den größten Abstand von dieser Strecke hat:
- {\ displaystyle d_ {max} = \ max _ {i = 2 \ punkte n-1} d \ links {P_ {i}, {\ overline {P_ {1} P_ {n}}} \ rechts)}
In Abbildung 1 gibt es den Punkt c mit ihnen Abstand b . ist{\ displaystyle n = 2} oder {\ displaystyle d_ {max} \ leq \ varepsilon}, so dass Approximation korrekt war und die Innenpunkturen verworfen. Andernfalls wird de Approximation zu{\ displaystyle (P_ {1}, P_ {m}, P_ {n})} spürt beide von ihnen Folgefolgen
- {\ displaystyle K_ {1} = (P_ {1}, \ Punkte, P_ {m})} und {\ displaystyle K_ {2} = (P_ {m}, \ Punkte, P_ {n})}
Ihreseitshinhin überprüft, ob ihre inneren Punkter werden können (Bild 2 und 3).
Das Plan Ergebnis des Algorithmus ist die Durch Die Folge des nicht verworfene Punkte bestimmt Streckenzug, blau in Bild 4. Kein wo verworfene Punkte, grau in Bild 4, Hut zum Plan Ergebnis EINES Abstand Grösser als {\ displaystyle \ varepsilon}.
Pseudocode
Funktion DouglasPeucker (Punktliste [], epsilon) // Finde den Punkt with the grösste Abstand dmax = 0 Index = 0 für i = 2.02 (Länge (Punktliste) - 1) d = LotrechterAbstand (Punktliste [i], Linie (Punktliste [ 1] Punktliste [Ende])) , wenn d> dmax index = i dmax = d // wenn Die Maximale entfernung Grösser als Epsilon ist, Dann rekursive vereinfachen , wenn dmax> = epsilon // rekursiven Aufruf recResults1 [] = DouglasPeucker (Punktliste [ 1 ... index], epsilon) recResults2 [] = DouglasPeucker (Punktliste [index ... Ende], epsilon) // Ergebnisliste Aufbau Aus den Ergebnissen [] = {recResults1 [1 ... end-1] recResults2 [1 ... end]} else Aus den Ergebnissen [] = {Punktliste [1] Punktliste [Ende]} // Plan Ergebnis zurückgeben Rückkehr aus den Ergebnissen [] Ende
Abstandsformel
Lieget der Streckenzug (Zumindest in Guter Näherung) in Einer Ebene, so geschweißt, dass Abstände {\ displaystyle d_ {i}}Effizient berechnen, INDEMAR eine vor der Iteration über sterben Innere Punkte{\ displaystyle P_ {i}}EIN in der Ebene liegend Normaleneinheitsvektor zum gerade Durch{\ displaystyle P_ {1}} und {\ displaystyle P_ {n}}ermittelt und diesen dann mit den Verschiebungsvektoren {\ displaystyle {\ overrightarrow {P_ {1} P_ {i}}}} Skaliert Multiplikator . In mehr als Zwei Dimensionen berechnet man keinen Einfluss auf den Fußpunkt Dezember Lotes .