270 likes | 422 Views
Konvexe Hüllen. Im dreidimensionalen Raum. Allg. Grundlagen: Polyeder. Polyeder stellen eine durch Punkte, Kanten und Polygone definierte Oberfläche dar.
E N D
Konvexe Hüllen Im dreidimensionalen Raum
Allg. Grundlagen: Polyeder Polyeder stellen eine durch Punkte, Kanten und Polygone definierte Oberfläche dar. Um ungeordnete Oberflächensammlungen von hinreichend abgeschlossenen Volumen unterscheiden zu können, führen wir die Bezeichnung ‚proper‘ ein. Ein Polyeder ist ‚proper‘ gdw. • (1) für jedes Paar von Polygonen gilt, dass sie • Disjunkt sind. • Einen Punkt gemein haben. • Zwei Punkte und die zugehörige Kante gemeinsam haben. • (2) die Umgebung eines jedes Punktes flach auf eine Ebene projizierbar ist und eine den Punkt umschließende Scheibe ergibt. Hierbei dürfen sich Dreiecke nicht überlappen. • (3) von jedem Punkt der Oberfläche jeder weitere über Flächen und Kanten erreichbar ist.
Polytope – konvexe Polyeder Die Konvexität eines Polyeders lässt sich durch die folgenden äquivalenten Sätze bestimmen. • Für jedes Paar von Dreiecken, die eine Kante gemein haben, gilt, dass der innere Winkel zwischen den beiden Dreiecken nicht größer alsπsein darf. • Die Winkelsumme aller Kanten um einen Punkt darf nicht größer als 2*π sein. α <= π
Eulersche Formel Def.: Der Genus eines Polyeders gibt die Anzahl der ‚Tunnel‘ an, die durch das Polyeder hindurch führen. Ein einfaches Polyeder vom Genus 1 stellt der Torus dar. Für Polyeder vom Genus 0 stellte Leonard Euler 1758 die folgende Formel auf: Sei P die Anzahl aller Punkte, K die Anzahl aller Kanten und F die Anzahl aller Flächen eines Polyeders, so gilt: P – K + F = 2 Um Eulers Formel zu beweisen muss das Polyeder zunächst in einen planaren Graphen umgewandelt werden: Wird aus einem Polyeder eine Fläche f entfernt, so ist es möglich, das Polyeder so auf eine Ebene zu strecken, dass sich keine zwei Kanten schneiden, keine zwei Punkte zusammenfallen und kein Punkt innerhalb einer Fläche liegt. Auf dieser Ebene ist nun jede Fläche des Polyeders mit Ausnahme von f von jeweils n Kanten eingeschlossen. f bildet die umschließende Fläche. Das gestreckte Polyeder bildet damit nun einen 2-dimensionalen Graph.
Eulersche FormelInduktionsbeweis Induktionsanfang: Sei G ein Graph mit zwei Punkten und einer Kante. Die einzige Fläche ist die umschließende. D.h. P = 2, K = 1, F = 1 => P – K + F = 2 – 1 +1 = 2 Induktionsschritt: Sei Gn-1 ein Graph mit n-1 Kanten, pn-1 Punkten und fn-1 Flächen, für den Eulers Formel gelte. D.h. pn-1 – (n-1) + fn-1 = 2 Annahme: Eulers Formel gilt für Gn Für die neue Kante gelte die Einschränkung, dass sie an den bestehenden Graph anknüpfen muss. Daraus ergeben sich die folgenden beiden Möglichkeiten: • Die Kante teilt eine bestehende Fläche, d.h. sie knüpft an bestehende Punkte an. Daraus folgt pn = pn-1 bzw. fn = fn-1 +1 => pn – n + fn = pn-1 – n + fn-1+1 = pn-1 – (n-1) + fn-1 = 2 • Die Kante teilt keine bestehende Fläche, d.h. es muss genau ein weiterer Punkt hinzugefügt werden. Die Flächenanzahl hingegen bleibt gleich. Daraus folgt pn = pn-1 +1 bzw. fn = fn-1 => pn – n + fn = pn-1 +1 – n + fn-1 = pn-1 – (n-1) + fn-1 = 2 qed.
Bildung konvexer Hüllen aus Punktmengen • Divide and Conquer Ermittlung der konvexen Hülle durch Aufteilung der Punktmenge und verschmelzen konvexer Hüllen Laufzeit: O (n log n) • Incremental Algorithm Ausgehend von einem Tetraeder wird die Gesamthülle durch schrittweises hinzufügen der verbleibenden Punkte. Laufzeit: O (n²) bzw. in optimierter Form O (n log n)
Konvexe HüllenGrundlagen 1: Das Objektnetz Um Objekte algorithmisch erfassen zu können wird eine strikte Struktur benötigt. Diese stellt nur eine mögliche solche Struktur dar. Vertex Position: x, y, z / p[3] 2 pro Kante Vertex 2 pro Kante Edge Edge Face 3 pro Fläche (3 pro Fläche) Face
Konvexe Hüllen Grundlagen 2: Listenstrukturen Für die Berechnung von Objekten sind Listen unumgänglich. Die genaue Definition solcher Listen ist allerdings eher zweitrangig solange die verwendete Liste folgende Charakteristiken aufweist: • Standartoperationen: Hinzufügen, Löschen, Entfernen • Pointerstabilität: Wird ein Element hinzugefügt oder entfernt beeinflusst dies nicht die Speicheradressen anderer Elemente. Zur Realisierung des Incremental Algorithm wird eine Liste für jeweils Punkte, Kanten und Flächen benötigt. Dabei muss sichergestellt werden, dass Flächen und Kanten auf Elemente der jeweiligen Punkt- bzw. Kanten-/Flächen-Listen zeigen. Das entstehende Pointernetz muss mit großer Sorgfalt aufgebaut und verwaltet werden. Es ist empfehlenswert, stabile vorgefertigte Listen zu verwenden.
Realisierung derObjekt-Listenstruktur Face Vertices Edges Faces Edge
Konvexe Hüllen Grundlagen 3: Flächenorientierung Um zugewandte von rückseitigen Oberflächen unterscheiden zu können, muss die Orientierung der Oberfläche aus Richtung des Blickpunktes bestimmt werden. • Zur Bestimmung der Orientierung gibt es unter anderem die folgenden Möglichkeiten: • Ermittlung des Volumen-Vorzeichens • Berechnung der Orientierung über die Normale Blickpunkt
Bestimmung des Tetraeder-Volumens (Wegfall bei 0-Punkt-Volumenbestimmung) Die Formel liefert je nach Orientierung des Dreiecks abc gegenüber d ein positives bzw. negatives Resultat. Dadurch eignet sich die Formel obschon ihres immensen Rechenaufwandes zur Ermittlung der Dreiecksorientierung.
Bestimmung der Orientierung mittels Normale p3 p2 Blickrichtung (d) v1 Normale (n) Leicht ersichtlich ist der anfallende Aufwand erheblich geringer. Auch ist der Wertebereich um eine Potenz geringer. p0 v0 p1
Konvexe HüllenGrundlagen 4: Inside-check Um zu bestimmen, ob ein gegebener Punkt innerhalb oder außerhalb eines konvexen Körpers liegt, muss die Orientierung jeder Fläche gegenüber dem gegebenen Punkt bestimmt werden. Ein Punkt P liegt innerhalb eines konvexen Körpers K, gdw. für alle Flächen F von K gilt, dass P sich auf der abgewandten Seite von F befindet. Äquivalent dazu ist die Aussage, dass P in K liegt, gdw. für alle F von K die gleiche Orientierung bezüglich P vorliegt. Dies gilt für 2- und 3-dimensionale konvexe Körper gleichermaßen. Der schwarze Punkt liegt innerhalb des Körpers, da alle Seiten abgewandt sind. Der weiße hingegen ‚sieht‘ eine Oberfläche und liegt damit außerhalb des Körpers
Divide and Conquer Ähnlich wie im 2-dimensionalen Raum kann die kleinste konvexe Hülle über Rekursion in O(n log(n)) bestimmt werden. Die Menge der Punkte wird entlang einer Koordinaten-Achse in zwei Gruppen unterteilt und deren konvexe Hüllen in folgender Weise zu einer verschmolzen. • Zunächst muss eine untere Tangentenachse t gefunden werden, die je einen Punkt beider Objekte schneidet. Alle Punkte beider Objekte müssen sich auf der gleichen Seite einer durch t und Z gebildeten Ebene befinden. • Um diese Achse muss nun ein Winkelextrem-Punkt gefunden werden, der mit den bereits gefundenen zwei Punkten ein Dreieck der neuen Konvexen Hülle bildet. • Von den zwei weiteren Kanten des gebildeten Dreiecks wird die ausgesucht, wie sich zwischen den beiden Volumen erstreckt und ausgehend von dieser Schritt 2) wiederholt, bis die gefundene Achse der ursprünglichen entspricht. • Als letztes müssen alle Dreiecke gelöscht werden, die innerhalb der neuen konvexen Hülle liegen.
Divide and ConquerSchritt1: Basiskantenbestimmung Zunächst werden von beiden Objekten die Punkt mit der je niedrigsten Y-Koordinate ausgesucht und auf ihnen eine Ebene entlang der Achse PQ und der Koordinatenachsen Z errichtet. Zur Orientierungshilfe wird auf ihr das Dreieck PQR konstruiert. B A Für jeden Nachbar von Q wird eine Orientierungsprüfung nach PQR ausgeführt. Ist das Dreieck dem Punkt zugewandt, wird dies der neue Punkt Q. PQR rotiert dabei um die Z-Achse. Q Findet sich kein Extrempunkt werden A und B vertauscht und der Prozess wird über einem redefinierten Q fortgeführt. Der Prozess ist abgeschlossen, wenn sich P und Q nicht mehr ändern. Der Verfahren arbeitet P R Z Y
Divide and ConquerSchritt2: Gift-Wrapping βi Q‘ Zur Bestimmung der nächsten Oberfläche müssen ausschließlich die Umgebungen von P und Q betrachtet werden. Für jeden der beiden Kegel wird ein lokaler Extrempunkt entlang der P – Q –Achse mittels Orientierungstests bestimmt. αi Q P Der ermittelte globale Extrempunkt bildet mit P und Q die nächste Oberfläche, die neu entstandene Kante die Krümmungsachse. Zusätzlich wird auch der nichtglobale Extrempunkt α gespeichert. Lemma: Wenn βi den globalen Extrempunkt bildet, dann liegt der nächste lokale Extrempunkt αi im Gegenuhrzeigersinn um P ausgehend vom letzten lokalen Extrempunkt αi-1.
Divide and ConquerSchritt3: Aufräumen1 Der Gift-Wrapping – Algorithmus beendet in dem Augenblick, wo die neu definierte Krümmungskante der Anfangskante entsprich. B A Der Algorithmus liefert zwar in eindeutiger Weise die Schattenkanten zwischen denen die hinzugefügten Flächen definiert wurden, nicht jedoch die Oberflächen und/oder Punkte, die nun innerhalb der konvexen Hülle liegen. Eine mögliche Lösung stellt eine Art von Floodfill-Algorithmus dar.
Divide and ConquerSchritt3: Aufräumen2 Beginnend an einer identifizierten Kante wird das erste verdeckte Dreieck markiert. Ausgehend von diesem springt der Algorithmus zu dessen zwei Nachbardreiecken und markiert dabei sowohl die Kanten, über die er läuft, als auch die Dreiecke in die er springt. Dabei darf der Algorithmus weder über Randkanten noch über bereits markierte Kanten bzw. in markierte Dreiecke springen. Erst wenn keine weiteren Dreiecke oder Kanten markiert werden konnte können die markierten Elemente gelöscht werden.
Incremental Algorithm Ausgehend von einem bestehenden konvexen Körper wird durch hinzufügen eines einzigen Punktes ein neuer größerer konvexer Körper gebildet. Ausgehend vom kleinsten Körper, dem Tetraeder, werden in jedem Schritt innere Punkte, Kanten und Oberflächen gelöscht und/oder neue hinzugefügt. Schritt 1) Tetraeder-Bildung: Ausgehend von einem beliebig gewählten Punkt werden zwei weitere linear unabhängige Punkte gesucht um das Basisdreieck zu bilden. Ein vierter Punkt wird so gewählt, dass er außerhalb der aufgespannten Ebene liegt und mit den drei vorherigen Punkten eine Raum aufspannt. Die korrekte Orientierung kann mit Hilfe von Orientierungstests bestimmt werden. Das erste Dreieck muss vom vierten Punkt abgewandt sein.
Hinzufügen von PunktenSchritt 1: Zugewandte Flächen identifizieren P Durch einfache Orientierungsüberprüfung aller Flächen gegenüber P können zugewandet Flächen in linearer Zeit identifiziert werden.
Hinzufügen von PunktenSchritt 2: Kanten identifizieren P Wie teilen die Kanten der Hülle in drei Kategorien ein. Abgewandte Kanten, die an zwei abgewandte Flächen grenzen. Zugewandte Kanten, die an zwei zugewandte Flächen grenzen und Tangenten-Kanten, die an jeweils eine zugewandte und eine abgewandte Fläche grenzen.
Hinzufügen von PunktenSchritt 3: Elemente löschen P Nun werden alle zugewandten Kanten und Flächen gelöscht. In der verwendeten Datenstruktur sollten jedoch vor dem Löschen Verweise offener Kanten auf zu löschenden Elemente korrigiert bzw. gegebenenfalls auf NULL gesetzt werden. Zu bemerken ist noch, dass die nun offenen Kanten einen geschlossenen Kreis bilden.
Hinzufügen von PunktenSchritt 4: neue Kanten und Flächen bilden P An jeder offenen Kante wird nun eine neue Fläche gebildet. Das neue Dreieck wird durch die zwei Punkte der Kante und den neuen Punkt P gebildet. Die korrekte Orientierung kann an der gegenüberliegende Fläche der Kante abgelesen werden. Zum schnelleren Bilden der neuen Kanten kann es sinnvoll sein, die offenen Kanten zu verketten.
Randomized Incremental Algorithm Wie bereits gesagt benötigt der Incremental Algorithm eine O(n²)-Laufzeit. Sind jedoch zu Anfang Anzahl und Positionen aller Punkte bekannt, so kann eine modifizierte Version des Incremental Algorithm Hüllen in O (n log n) (erwartete Zeit) bilden. Zur Realisierung müssen zu Beginn weitere Informationen in die Datenstruktur eingefügt werden: 1.) Für jeden Vertex wird eine „Konflikt“ - Liste aller Flächen angelegt, die für ihn sichtbar sind. Ausgehend vom ersten minimalen Tetraeder sind zu diesem Zeitpunkt für jeden noch hinzuzufügenden Vertex 1 bis 3 Flächen sichtbar. Vertices, die keine Flächen sehen, liegen innerhalb der Hülle und können gelöscht werden. 2.) Für jede Fläche wird eine Konfliktliste aller Vertices angelegt, die diese ‚sehen‘ können. Jede Fläche teilt den Vertex-Raum in zwei Hemisphären, von denen nur eine relevant ist. Nach jeder Iteration müssen diese Listen aktualisiert werden. Durch die Teilung wird der Algorithmus jedoch für bekannte Punkte erheblich schneller. In die Konfliktliste der grünen Fläche werden alle weißen Punkte eingetragen. Umgekehrt ist die grüne Fläche Element der Konfliktliste jedes weißen Punktes.
Randomized Incremental AlgorithmHinzufügen von Punkten I 1.) Bestimmung der Schattenkanten: Zunächst werden alle sichtbaren Flächen des neuen Punktes p durchlaufen und gleichzeitig deren Kanten markiert. Kanten, die nur an eine sichtbare Fläche grenzen, bilden den Schattenpfad von p. 2.) Bildung der neuen Flächen: Ausgehend vom identifizierten Schattenpfad entsteht für jede Kante des Pfades eine neue Fläche. Die Kollisionsliste jeder neuen Fläche muss nur über den Punkten der Kollisionslisten der, an die jeweilige Schattenkante grenzenden, Flächen gebildet werden. k Beim Hinzufügen von f über p und k kann die anzulegende Kollisionsliste für f nur Punkte beinhalten, die entweder von f0 oder f1 sichtbar sind. f f0 p f1
Randomized Incremental AlgorithmHinzufügen von Punkten II 3.) Bei der Aktualisierung der Punkt-Kollisionslisten müssen ebenfalls nur die Punkte berücksichtigt werden, die von den Schattenkanten gesehen werden (sichtbar für eine der an die Kanten angrenzenden Flächen sind). Punkte, die von den zu löschenden Flächen, nicht jedoch von den Schattenkanten, gesehen werden, liegen zwingend innerhalb der neuen konvexen Hülle und müssen gelöscht werden. Die obere Schranke O (n log n) stellt die erwartete maximale Laufzeit dar. Diese basiert auf der Einschränkung der Problemzone auf einen angenommen kleinen Anteil aller noch hinzuzufügenden Punkte.
Quellen: „Computational Geometry in C“ – Joseph O‘Rourke Verfasst von Stefan Elsen 16.2.2005