<?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=QuickHull</id>
	<title>QuickHull - 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=QuickHull"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=QuickHull&amp;action=history"/>
	<updated>2026-05-24T08:32:38Z</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=QuickHull&amp;diff=1801841&amp;oldid=prev</id>
		<title>imported&gt;Troubled asset: Änderung 258950676 von Maximum 2520 rückgängig gemacht; unerwünscht gemäß eindeutiger Diskussion</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=QuickHull&amp;diff=1801841&amp;oldid=prev"/>
		<updated>2025-09-25T11:49:59Z</updated>

		<summary type="html">&lt;p&gt;Änderung &lt;a href=&quot;/index.php/Spezial:Diff/258950676&quot; title=&quot;Spezial:Diff/258950676&quot;&gt;258950676&lt;/a&gt; von &lt;a href=&quot;/index.php/Spezial:Beitr%C3%A4ge/Maximum_2520&quot; title=&quot;Spezial:Beiträge/Maximum 2520&quot;&gt;Maximum 2520&lt;/a&gt; rückgängig gemacht; unerwünscht gemäß eindeutiger Diskussion&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[[Datei:Animation depicting the quickhull algorithm.gif|mini|Animation des QuickHull Algorithmus]]&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;QuickHull&amp;#039;&amp;#039;&amp;#039; ist ein [[Algorithmus]] zur Berechnung der [[Konvexe Hülle|konvexen Hülle]] einer beliebigen [[Endliche Menge|endlichen Menge]] von Punkten im zwei- oder dreidimensionalen Raum. Die konvexe Hülle einer Menge von Punkten wird beschrieben durch einen geschlossenen [[Polygonzug (Mathematik)|Polygonzug]], der die Verbindung aller [[Extremalpunkt]]e 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.&lt;br /&gt;
&lt;br /&gt;
== Namensgebung und Entstehung ==&lt;br /&gt;
Der Name &amp;#039;&amp;#039;QuickHull&amp;#039;&amp;#039; leitet sich aus der Ähnlichkeit zu [[Quicksort]] ab, einem [[Algorithmus]] zum Sortieren beliebiger Mengen. Er findet zum ersten Mal Erwähnung im Buch &amp;#039;&amp;#039;Computational geometry&amp;#039;&amp;#039; von Franco Preparata und Michael Shamos,&amp;lt;ref name=&amp;quot;computational_geometry&amp;quot;&amp;gt;{{Literatur|Autor = [[Franco P. Preparata]], [[Michael Ian Shamos]] | Titel = Computational Geometry | TitelErg = An Introduction | Verlag = [[Springer Science+Business Media|Springer-Verlag]]| Jahr = 1985 | Auflage = 1. | ISBN = 0-387-96131-3}}&lt;br /&gt;
&amp;lt;/ref&amp;gt; in dem die beiden Autoren den hier beschriebenen Algorithmus vorstellen, der die Ideen anderer Autoren aufgreift.&amp;lt;ref name=&amp;quot;eddy&amp;quot;&amp;gt;{{cite journal|author = [[William F. Eddy]] | title = A New convex Hull Algorithm for Planar Sets | journal = ACM Transactions on Mathematical Software | volume = 3 | pages = 393–403 | year = 1977}}&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;bykat&amp;quot;&amp;gt;{{cite journal|author = [[Alex Bykat]] | title = Convex Hull of a Finite Set of Points in Two Dimensions | journal = Information Processing Letters | volume = 7 | pages = 296–298 | year = 1978}}&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;green&amp;quot;&amp;gt;{{cite journal|author = [[P. J. Green]], [[B.W. Silverman]] |title = Constructing the Convex Hull of a Set of Points in the Plane | journal = Computer Journal | volume = 22 | year = 1979 | pages = 262–266}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Grundidee ==&lt;br /&gt;
Die algorithmische Idee zu QuickHull kommt aus dem Prinzip „[[Teile und herrsche (Informatik)|Teile und Herrsche]]“, 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 [[Rekursion|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.&lt;br /&gt;
&lt;br /&gt;
== Pseudocode ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Bezeichnungen&amp;#039;&amp;#039;&amp;#039;: &amp;#039;&amp;#039;S&amp;#039;&amp;#039; ist die Menge der gegebenen Punkte, &amp;#039;&amp;#039;Sk&amp;#039;&amp;#039; ist die Menge der Punkte auf einer Seite der Geraden durch die Punkte &amp;#039;&amp;#039;P&amp;#039;&amp;#039; und &amp;#039;&amp;#039;Q&amp;#039;&amp;#039;.&amp;lt;ref&amp;gt;OpenGenus IQ: [https://iq.opengenus.org/quick-hull-convex-hull/ Quick Hull Algorithm to find Convex Hull]&amp;lt;/ref&amp;gt;&lt;br /&gt;
 &amp;#039;&amp;#039;&amp;#039;Funktion&amp;#039;&amp;#039;&amp;#039; QuickHull(S)&lt;br /&gt;
 {&lt;br /&gt;
     &amp;#039;&amp;#039;// Bestimmt die konvexe Hülle der Menge S&amp;#039;&amp;#039;&lt;br /&gt;
     Convex Hull := {} &lt;br /&gt;
     A := Punkt ganz links&lt;br /&gt;
     B := Punkt ganz rechts&lt;br /&gt;
     Füge die Punkte A und B der konvexen Hülle hinzu&lt;br /&gt;
     // Die Gerade AB teilt die verbleibenden n - 2 Punkte in die Teilmengen S1 und S2&lt;br /&gt;
     S1 := Menge der Punkte in S, die auf der rechten Seite von AB sind&lt;br /&gt;
     S2 := Menge der Punkte in S, die auf der linken Seite von AB sind&lt;br /&gt;
     FindHull(S1, A, B)&lt;br /&gt;
     FindHull(S2, B, A)&lt;br /&gt;
     Ausgabe: Convex Hull&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 &amp;#039;&amp;#039;&amp;#039;Funktion&amp;#039;&amp;#039;&amp;#039; FindHull(Sk, P, Q)&lt;br /&gt;
 {&lt;br /&gt;
     &amp;#039;&amp;#039;// Bestimmt die Punkte auf der konvexen Hülle der Menge S&amp;#039;&amp;#039;k, die auf der rechten Seite der Geraden PQ sind&lt;br /&gt;
     &amp;#039;&amp;#039;&amp;#039;Wenn&amp;#039;&amp;#039;&amp;#039; Sk keine Punkte enthält &amp;#039;&amp;#039;&amp;#039;dann&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
         Ausgabe: Convex Hull&lt;br /&gt;
     C := Der Punkt in Sk, der den größten Abstand von der Geraden PQ hat&lt;br /&gt;
     Füge den Punkt C in die konvexe Hülle zwischen den Punkten P und Q ein&lt;br /&gt;
     // Die drei Punkte P, Q und C teilen die verbliebenen Punkte von Sk in die Teilmengen S0, S1 und S2&lt;br /&gt;
     S0 := Die Punkte innerhalb des Dreiecks PCQ&lt;br /&gt;
     S1 := Die Punkte auf der rechten Seite der Geraden PC&lt;br /&gt;
     S2 := Die Punkte auf der rechten Seite der Geraden CQ&lt;br /&gt;
     FindHull(S1, P, C)&lt;br /&gt;
     FindHull(S2, C, Q)&lt;br /&gt;
     Ausgabe: Convex Hull&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== Beispiel ==&lt;br /&gt;
[[Bild:Quickhull example1.svg|links|mini|1. Initiale Punktmenge]]&lt;br /&gt;
Der Algorithmus operiert auf einer beliebigen endlichen [[Menge (Mathematik)|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 &amp;lt;math&amp;gt;\mathcal{O}(n \cdot \log (n))&amp;lt;/math&amp;gt; zu verlassen und deutlich langsamer zu sein.&lt;br /&gt;
&lt;br /&gt;
[[Bild:Quickhull example2.svg|right|mini|2. Linke und rechte Extremalpunkte]]&lt;br /&gt;
Zur Bestimmung der ersten Aufteilung der Menge werden die beiden [[Extrempunkt|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 derselben sind.&lt;br /&gt;
&lt;br /&gt;
[[Bild:Quickhull example3.svg|links|mini|3. Aufteilung in linke und rechte Punktmenge]]&lt;br /&gt;
Die beiden gefundenen Punkte bilden eine [[Gerade]], welche die Punktmenge in zwei Bereiche teilt. Alle Punkte &amp;#039;&amp;#039;links&amp;#039;&amp;#039; von der Geraden repräsentieren eine Menge und alle Punkte &amp;#039;&amp;#039;rechts&amp;#039;&amp;#039; von der Gerade die andere. &amp;#039;&amp;#039;Rechts&amp;#039;&amp;#039; und &amp;#039;&amp;#039;links&amp;#039;&amp;#039; 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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[Bild:Quickhull example4.svg|right|mini|4. Punkt mit maximaler Distanz von der Geraden]]&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[Bild:Quickhull example5.svg|links|mini|5. Punkte innerhalb des Dreiecks werden ignoriert]]&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[Bild:Quickhull example6.svg|right|mini|6. Erneute Aufteilung und rekursiver Aufruf]]&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[Bild:Quickhull example7.svg|links|mini|7. Das fertige Konvexe-Hülle-Polygon]]&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Einzelnachweise ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Programmierung]]&lt;br /&gt;
[[Kategorie:Algorithmische Geometrie]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Troubled asset</name></author>
	</entry>
</feed>