Douglas-Peucker-Algorithmus

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 .

Linienglättung nach dem Douglas-Peucker-Algorithmus

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 .

Schreibe einen Kommentar