QuickHull

QuickHull

QuickHull ist ein Algorithmus zur Berechnung der Konvexen Hülle einer beliebigen Punktemenge im zwei- und dreidimensionalen Raum. Die Konvexe Hülle einer Menge von Punkten wird beschrieben durch einen geschlossenen Polygonzug welcher die Verbindung aller äußeren Punkte der Menge darstellt, und somit alle Punkte der Menge einschließt. Eine häufig verwendete intuitive Erklärung dieser Hülle ist ein Gummiband, welches sich um die Punktemenge spannt. Dieses bildet, wenn es straff auf allen äußeren Punkten aufliegt die Konvexe Hülle der Punktemenge.

Inhaltsverzeichnis

Namensgebung und Entstehung

Der Name QuickHull leitet sich aus der Ähnlichkeit zu Quicksort, einem Algorithmus zum sortieren beliebiger Mengen, ab. Er findet zum ersten Mal Erwähnung im Buch Computational geometry von Franco Preparata und Michael Shamos [1], in dem die beiden Autoren den hier beschriebenen Algorithmus vorstellen, welcher die Ideen anderer Autoren aufgreift. [2] [3] [4]

Algorithmus

Die algorithmische Idee zu QuickHull kommt aus dem Teile und Herrsche Prinzip, das in der Informatik häufig zum Einsatz kommt. Es beschreibt die Vorgehensweise, das Problem in mehrere kleine Probleme zu unterteilen und diese dann durch Anwendung des gleichen Algorithmus rekursiv zu lösen. In diesem Zusammenhang wird oft versucht, die Teilung so geschickt zu wählen, dass durch diese bereits eine große Anzahl von ungültigen Lösungsmengen herausfallen. Durch diese Art des Aufbaus können Algorithmen, die nach diesem Prinzip entworfen worden, häufig einfach und gut lesbar implementiert werden, da sie eine verständliche rekursive Struktur besitzen.

Beispiel

1. Initiale Punktmenge

Der Algorithmus operiert auf einer beliebigen Menge von Punkten. Es bestehen keinerlei besondere Anforderungen an die Anordnung oder Anzahl der Punkte. Eine symmetrische Anordnung der Punkte besitzt jedoch eine höhere Wahrscheinlichkeit die Best Case (bester Fall) Laufzeitschranke von \mathcal{O}(n \cdot \log (n)) zu verlassen und deutlich langsamer zu sein.

2. Linke und rechte Extremalpunkte

Zur Bestimmung der ersten Aufteilung der Menge werden die beiden Extremalpunkte der X-Achse gesucht. Also diejenigen Punkte, welche am weitesten links und am weitesten rechts liegen. Diese Punkte können bereits dem Polygonzug der Konvexen Hülle hinzugefügt werden, da sie als Extrempunkte garantiert Bestandteil dessen sind.

3. Aufteilung in linke und rechte Punktmenge

Die beiden gefundenen Punkte bilden eine Gerade, welche die Punktmenge in zwei Bereiche teilt. Alle Punkte links von der Geraden repräsentieren eine Menge und alle Punkte rechts von der Gerade die andere. Rechts und links ergeben sich in diesem Zusammenhang aus dem Winkel zwischen dem Richtungsvektor der Trennungsgeraden und dem Vektor definiert durch den Anfangspunkt der Geraden und den zu überprüfenden Punkt. Ist dieser Winkel kleiner als 180°, dann wird der Punkt als rechts von der Geraden betrachtet, bei Winkeln größer 180° als links von ihr.

Die beiden durch diese Gerade getrennten Punktmengen werden nun rekursiv mit dem QuickHull Algorithmus weiter verarbeitet. In diesem Beispiel wird lediglich der linke Teil der Punktemenge weiter betrachtet. Alle gemachten Aussagen treffen äquivalent auch auf den rechten Teil zu.

4. Punkt mit maximaler Distanz von der Geraden

Innerhalb der betrachteten Punktmenge wird jener Punkt bestimmt, der die maximale Distanz von der Geraden besitzt. Dieser ist offensichtlich ebenfalls ein Bestandteil des gesuchten Polygonzugs. Zusammen mit dem Start- und Endpunkt der Geraden entsteht ein Dreieck.

5. Punkte innerhalb des Dreiecks werden ignoriert

Das Dreieck setzt sich zusammen aus drei Punkten, von denen alle Bestandteil des Konvexen-Hülle-Polygons sind. Aus diesem Grund können alle Punkte im inneren dieses Dreiecks nicht Bestandteil dieses Polygons sein, da sie ja bereits in seinem Inneren liegen. Alle Punkte innerhalb dieses Dreiecks können also bei weiteren rekursiven Aufrufen des Algorithmus ignoriert werden.

6. Erneute Aufteilung und rekursiver Aufruf

Die sich als Seiten des Dreiecks ergebenden Geraden werden nun als erneute Trenngeraden der Punktemenge betrachtet. Alle Punkte links von dem Dreieck repräsentieren eine Menge, alle Punkte rechts von dem Dreieck die andere.

7. Das fertige Konvexe-Hülle-Polygon

Diese rekursive Aufteilung und Bestimmung weiterer Punkte wird so lange wiederholt, bis nur noch der Start- und Endpunkt der Trenngeraden Bestandteil der zu betrachtenden Punktmenge sind, denn in diesem Fall ist klar, dass diese Gerade ein Segment des gesuchten Polygonzugs darstellt.

Literatur

  1. Franco P. Preparata, Michael Ian Shamos: Computational Geometry. An Introduction. 1. Auflage. Springer-Verlag, 1985, ISBN 0-387-96131-3.
  2. William F. Eddy: A New convex Hull Algorithm for Planar Sets. In: ACM Transactions on Mathematical Software. 3, 1977, S. 393-403.
  3. Alex Bykat: Convex Hull of a Finite Set of Points in Two Dimensions. In: Information Processing Letters. 7, 1978, S. 296-298.
  4. P. J. Green, B.W. Silverman: Constructing the Convex Hull of a Set of Points in the Plane. In: Computer Journal. 22, 1979, S. 262-266.

Wikimedia Foundation.

Игры ⚽ Нужно сделать НИР?

Schlagen Sie auch in anderen Wörterbüchern nach:

  • Convex hull algorithms — Algorithms that construct convex hulls of various objects have a broad range of applications in mathematics and computer science, see Convex hull applications . In computational geometry, numerous algorithms are proposed for computing the convex… …   Wikipedia

  • Konvexe Hülle — Die blaue Menge ist die konvexe Hülle der roten Menge. Die konvexe Hülle einer Teilmenge ist die kleinste konvexe Menge, die die Ausgangsmenge enthält. Betrachtet wird dieses Objekt in unterschiedlichen mathematischen Disziplinen wie zum Beispiel …   Deutsch Wikipedia

  • Triangulación de Delaunay — Una triangulación de Delaunay /dəlo ne/, a veces escrito fonéticamente «Deloné», es una red de triángulos que cumple la condición de Delaunay. Esta condición dice que la circunferencia circunscrita de cada triángulo de la red no debe contener… …   Wikipedia Español

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”