<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Douglas-Peucker-Algorithmus</id>
	<title>Douglas-Peucker-Algorithmus - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Douglas-Peucker-Algorithmus"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Douglas-Peucker-Algorithmus&amp;action=history"/>
	<updated>2026-06-09T17:35:45Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Wikipedia (Deutsch) – Lokale Kopie</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki-de.moshellshocker.dns64.de/index.php?title=Douglas-Peucker-Algorithmus&amp;diff=390913&amp;oldid=prev</id>
		<title>2003:D4:B700:8EDB:DE15:B9D5:3E89:76E: /* Algorithmus */</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Douglas-Peucker-Algorithmus&amp;diff=390913&amp;oldid=prev"/>
		<updated>2021-08-16T05:46:09Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Algorithmus&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Der &amp;#039;&amp;#039;&amp;#039;Douglas-Peucker-Algorithmus&amp;#039;&amp;#039;&amp;#039; (auch &amp;#039;&amp;#039;&amp;#039;Ramer-Douglas-Peucker-Algorithmus&amp;#039;&amp;#039;&amp;#039;) ist ein [[Algorithmus]] zur Kurven[[Glätten (Mathematik)|glättung]] im Bereich der [[Vektorgrafik]] und [[Generalisierung (Kartographie)|Generalisierung]] von Karten. Das Ziel ist, einen durch eine [[Folge (Mathematik)|Folge]] von [[Punkt (Geometrie)|Punkten]] gegebenen [[Polygonzug (Mathematik)|Streckenzug]] durch Weglassen einzelner Punkte (engl. {{lang|en|weeding}}) so zu vereinfachen, dass die grobe Gestalt erhalten bleibt. Der Grad der Vergröberung wird gesteuert durch Vorgabe des maximalen Abstands zwischen den ursprünglichen Punkten und dem [[Approximation|approximierenden]] Streckenzug. Die Ausgangsform des Algorithmus wurde von [[Urs Ramer]] und (unabhängig) von [[David Douglas (Begriffsklärung)|David Douglas]] und [[Thomas Peucker]] angegeben.&lt;br /&gt;
&lt;br /&gt;
== Algorithmus ==&lt;br /&gt;
Der Algorithmus betrachtet den Streckenzug als Ganzes (globaler Ansatz) und schreitet zu feineren Approximationen fort. Dazu wird die Ausgangsfolge geeignet in zwei Abschnitte geteilt, die dann ihrerseits den Algorithmus durchlaufen (siehe [[Rekursion#Formale Typen von Rekursion|Rekursion]]). Der Algorithmus realisiert damit einen Ansatz nach dem Prinzip des [[Teile-und-herrsche-Verfahren]]s.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Douglas Peucker.png|mini|Linienglättung nach dem Douglas-Peucker-Algorithmus]]&lt;br /&gt;
Gegeben ist der Ausgangsstreckenzug (Bild 0) als Folge von &amp;#039;&amp;#039;n&amp;#039;&amp;#039; Punkten&lt;br /&gt;
: &amp;lt;math&amp;gt;K=(P_1, \dots, P_i, \dots, P_n)&amp;lt;/math&amp;gt;&lt;br /&gt;
sowie die Toleranz &amp;lt;math&amp;gt;\varepsilon &amp;gt; 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Als Approximation von &amp;#039;&amp;#039;K&amp;#039;&amp;#039; wird die Strecke &amp;lt;math&amp;gt;\overline{P_1\,P_n}&amp;lt;/math&amp;gt; aus erstem und letztem Punkt betrachtet, &amp;#039;&amp;#039;&amp;#039;a&amp;#039;&amp;#039;&amp;#039; in Bild 1. Um zu prüfen, ob diese Approximation ausreicht, wird unter den &amp;lt;math&amp;gt;n-2&amp;lt;/math&amp;gt; inneren Punkten von &amp;#039;&amp;#039;K&amp;#039;&amp;#039; derjenige Punkt &amp;lt;math&amp;gt;P_m&amp;lt;/math&amp;gt; gesucht, welcher den größten Abstand von dieser Strecke hat:&lt;br /&gt;
: &amp;lt;math&amp;gt;d_{max}= \max_{i=2\dots n-1}d\left(P_i, \overline{P_1P_n}\right)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In Bild 1 ist dies der Punkt &amp;#039;&amp;#039;&amp;#039;c&amp;#039;&amp;#039;&amp;#039; mit dem Abstand &amp;#039;&amp;#039;&amp;#039;b&amp;#039;&amp;#039;&amp;#039;. Ist &amp;lt;math&amp;gt;n=2&amp;lt;/math&amp;gt; oder &amp;lt;math&amp;gt;d_{max} \leq \varepsilon&amp;lt;/math&amp;gt;, so ist die Approximation ausreichend und die inneren Punkte werden ggf. verworfen. Andernfalls wird die Approximation zu &amp;lt;math&amp;gt;(P_1, P_m, P_n)&amp;lt;/math&amp;gt; verfeinert und die beiden Teilfolgen&lt;br /&gt;
: &amp;lt;math&amp;gt;K_{1}=(P_1, \dots, P_m)&amp;lt;/math&amp;gt; &amp;amp;nbsp; und &amp;amp;nbsp; &amp;lt;math&amp;gt;K_{2}=(P_m, \dots, P_n)&amp;lt;/math&amp;gt;&lt;br /&gt;
werden ihrerseits daraufhin überprüft, ob ihre inneren Punkte verworfen werden können (Bild 2 und 3).&lt;br /&gt;
&lt;br /&gt;
Das Ergebnis des Algorithmus ist der durch die Folge der nicht verworfenen Punkte definierte Streckenzug, blau in Bild 4. Keiner der verworfenen Punkte, grau in Bild 4, hat zum Ergebnis einen Abstand größer als &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Pseudocode ===&lt;br /&gt;
 function DouglasPeucker(PointList[], epsilon)&lt;br /&gt;
     // Finde den Punkt mit dem größten Abstand&lt;br /&gt;
     dmax = 0&lt;br /&gt;
     index = 0&lt;br /&gt;
     for i = 2 to (length(PointList) −1)&lt;br /&gt;
         d = LotrechterAbstand(PointList[i], Line(PointList[1], PointList[end]))&lt;br /&gt;
         if d &amp;gt; dmax&lt;br /&gt;
             index = i&lt;br /&gt;
             dmax = d&lt;br /&gt;
&lt;br /&gt;
     // Wenn die maximale Entfernung größer als Epsilon ist, dann rekursiv vereinfachen&lt;br /&gt;
     if dmax &amp;gt; epsilon&lt;br /&gt;
         // Recursive call&lt;br /&gt;
         recResults1[] = DouglasPeucker(PointList[1...index], epsilon)&lt;br /&gt;
         recResults2[] = DouglasPeucker(PointList[index...end], epsilon)&lt;br /&gt;
&lt;br /&gt;
         // Ergebnisliste aufbauen&lt;br /&gt;
         ResultList[] = {recResults1[1...end-1], recResults2[1...end]}&lt;br /&gt;
     else&lt;br /&gt;
         ResultList[] = {PointList[1], PointList[end]}&lt;br /&gt;
&lt;br /&gt;
     // Ergebnis zurückgeben&lt;br /&gt;
     return ResultList[]&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
== Abstandsformel ==&lt;br /&gt;
Liegt der Streckenzug (zumindest in guter Näherung) in einer Ebene, so lassen sich die Abstände &amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt; effizient berechnen, indem man vor der [[Iteration#Informatik|Iteration]] über die inneren Punkte &amp;lt;math&amp;gt;P_i&amp;lt;/math&amp;gt; einen in der Ebene liegenden [[Normaleneinheitsvektor]] zur Geraden durch &amp;lt;math&amp;gt;P_1&amp;lt;/math&amp;gt; und &amp;lt;math&amp;gt;P_n&amp;lt;/math&amp;gt; ermittelt und diesen dann jeweils mit den Verschiebungs[[vektor]]en &amp;lt;math&amp;gt;\overrightarrow{P_1P_i}&amp;lt;/math&amp;gt; [[Skalarprodukt|skalar multipliziert]]. In mehr als zwei Dimensionen berechnet man zuerst den Fußpunkt des [[Lot (Mathematik)|Lotes]].&lt;br /&gt;
&lt;br /&gt;
Die Autoren Ramer bzw. Douglas und Peucker hatten die Möglichkeit nicht berücksichtigt, dass der Fußpunkt des Lotes nicht auf der Verbindungslinie liegt, sondern außerhalb, auf ihrer Verlängerung. Dadurch können Punkte wegfallen, die vom Endergebnis einen größeren als den zugesicherten Abstand haben.&amp;lt;!-- Darauf hat Konrad Ebisch hingewiesen (vermutlich nicht als erster, deshalb hier raus)--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Literatur ==&lt;br /&gt;
* Urs Ramer: &amp;#039;&amp;#039;An iterative procedure for the polygonal approximation of plane curves.&amp;#039;&amp;#039; In: &amp;#039;&amp;#039;Computer Graphics and Image Processing.&amp;#039;&amp;#039; Band 1, Nr. 3, 1972, {{ISSN|0146-664X}}, S. 244–256, [[doi:10.1016/S0146-664X(72)80017-0]].&lt;br /&gt;
* David Douglas, Thomas Peucker: &amp;#039;&amp;#039;Algorithms for the reduction of the number of points required to represent a digitized line or its caricature.&amp;#039;&amp;#039; In: &amp;#039;&amp;#039;The Canadian Cartographer.&amp;#039;&amp;#039; Band 10, Nr. 2, 1973, {{ISSN|0008-3127}}, S. 112–122.&lt;br /&gt;
* Geoffrey Dutton: &amp;#039;&amp;#039;Scale, Sinuosity and Point Selection in Digital Line Generalization.&amp;#039;&amp;#039; In: &amp;#039;&amp;#039;Cartography and Geographic Information Science.&amp;#039;&amp;#039; Band 26, Nr. 1, 1999, {{ISSN|1523-0406}}, S. 33–54, [[doi:10.1559/152304099782424929]] ([http://www.spatial-effects.com/papers/jour/GDutton-CAGIS.pdf GDutton-CAGIS.pdf spatial-effects.com]; PDF).&lt;br /&gt;
* Konrad Ebisch: &amp;#039;&amp;#039;A correction to the Douglas–Peucker line generalization algorithm.&amp;#039;&amp;#039; In: &amp;#039;&amp;#039;Computers &amp;amp; Geosciences.&amp;#039;&amp;#039; Band 28, 2002, Nr. 8, {{ISSN|0098-3004}}, S. 995–997, [[doi:10.1016/S0098-3004(02)00009-2]] ([https://web.archive.org/web/20150914113139/http://mappinghacks.com/code/PolyLineReduction Polyline Reduction -- 3DSoftware.com]).&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Algorithmus]]&lt;br /&gt;
[[Kategorie:Computergrafik]]&lt;/div&gt;</summary>
		<author><name>2003:D4:B700:8EDB:DE15:B9D5:3E89:76E</name></author>
	</entry>
</feed>