Quadtrees und Meshing

Ähnliche Dokumente
Kapitel 4: Dynamische Datenstrukturen. Algorithmen und Datenstrukturen WS 2012/13. Prof. Dr. Sándor Fekete

13. Binäre Suchbäume

Literatur. Dominating Set (DS) Dominating Sets in Sensornetzen. Problem Minimum Dominating Set (MDS)

Suchen und Sortieren Sortieren. Heaps

Kurs 1613 Einführung in die imperative Programmierung

Datenstruktur, die viele Operationen dynamischer Mengen unterstützt

4.1 Einführung. 4.2 Z-Ordnung. 4.3 R-Bäume. 4.4 Quadtrees. Kapitel 3: Räumliche Indexstrukturen. 4. Räumliche Indexstrukturen

8 Diskrete Optimierung

4. Lernen von Entscheidungsbäumen. Klassifikation mit Entscheidungsbäumen. Entscheidungsbaum

Kap. 4.4: B-Bäume Kap. 4.5: Dictionaries in der Praxis

3.1 Konstruktion von minimalen Spannbäumen Es gibt zwei Prinzipien für die Konstruktion von minimalen Spannbäumen (Tarjan): blaue Regel rote Regel

Sortierte Folgen 250

Der linke Teilbaum von v enthält nur Schlüssel < key(v) und der rechte Teilbaum enthält nur Schlüssel > key(v)

Computer Graphik II Tesselierung impliziter Kurven und Flächen

Kostenmaße. F3 03/04 p.188/395

2. Lernen von Entscheidungsbäumen

AVL-Bäume Analyse. Theorem Ein AVL-Baum der Höhe h besitzt zwischen F h und 2 h 1 viele Knoten. Definition Wir definieren die nte Fibonaccizahl:

Datenstrukturen und Algorithmen

Informatik II. PVK Part1 Severin Wischmann n.ethz.ch/~wiseveri

t r Lineare Codierung von Binärbbäumen (Wörter über dem Alphabet {, }) Beispiel code( ) = code(, t l, t r ) = code(t l ) code(t r )

4 Greedy-Algorithmen (gierige Algorithmen)

6. Algorithmen der Computer-Geometrie

Definition. Gnutella. Gnutella. Kriterien für P2P-Netzwerke. Gnutella = +

Effiziente Algorithmen und Datenstrukturen I. Kapitel 9: Minimale Spannbäume

Anmerkungen zur Übergangsprüfung

Eine Baumstruktur sei folgendermaßen definiert. Eine Baumstruktur mit Grundtyp Element ist entweder

Algorithmen und Datenstrukturen Bereichsbäume

Suche in Spielbäumen Spielbäume Minimax Algorithmus Alpha-Beta Suche. Suche in Spielbäumen. KI SS2011: Suche in Spielbäumen 1/20

WS 2009/10. Diskrete Strukturen

Algorithmen und Datenstrukturen Suchbaum

Abschnitt: Algorithmendesign und Laufzeitanalyse

Programmiertechnik II

4. Jeder Knoten hat höchstens zwei Kinder, ein linkes und ein rechtes.

Tutorium Algorithmen & Datenstrukturen

Codierung. Auszug aus dem Skript von Maciej Liśkiewicz und Henning Fernau

Kapiteltests zum Leitprogramm Binäre Suchbäume

Kap. 4.2: Binäre Suchbäume

Datenstrukturen & Algorithmen

Das Briefträgerproblem

Algorithmen und Datenstrukturen

Gliederung. Definition Wichtige Aussagen und Sätze Algorithmen zum Finden von Starken Zusammenhangskomponenten

6-1 A. Schwill Grundlagen der Programmierung II SS 2005

Grundlagen der 3D-Modellierung

Algorithmen und Datenstrukturen (WS 2007/08) 63

3.2 Binäre Suche. Usr/local/www/ifi/fk/menschen/schmid/folien/infovk.ppt 1

Binäre lineare Optimierung mit K*BMDs p.1/42

1. Einfach verkettete Liste unsortiert 2. Einfach verkettete Liste sortiert 3. Doppelt verkettete Liste sortiert

12. Modelle für 3D-Objekte und -Szenen

Kapitel MK:IV. IV. Modellieren mit Constraints

Grundlagen der Programmierung 2. Bäume

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12. Kapitel 13. Bäume. Bäume

Falten regelmäßiger Vielecke

Programmierung und Modellierung

9.4 Binäre Suchbäume. Xiaoyi Jiang Informatik II Datenstrukturen und Algorithmen

Vorlesung 3 MINIMALE SPANNBÄUME

Data Mining und Text Mining Einführung. S2 Einfache Regellerner

Lösungsblatt zur Vorlesung. Kryptanalyse WS 2009/2010. Blatt 6 / 23. Dezember 2009 / Abgabe bis spätestens 20. Januar 2010, 10 Uhr (vor der Übung)

Das Falten-und-Schneiden Problem

Algorithmische Methoden der Netzwerkanalyse

Einführung in die Informatik 1

Lösungsvorschläge. zu den Aufgaben im Kapitel 4

Informatik II Bäume. Beispiele. G. Zachmann Clausthal University, Germany Stammbaum. Stammbaum. Stammbaum

Frag die Maus. Sascha Kurz Diskrete Geometrie Universität Bayreuth. Frag die Maus. Sascha Kurz.

Wiederholung ADT Menge Ziel: Verwaltung (Finden, Einfügen, Entfernen) einer Menge von Elementen

Algorithmen & Datenstrukturen 1. Klausur

3. Übung Algorithmen I

Entscheidungsbäume. Definition Entscheidungsbaum. Frage: Gibt es einen Sortieralgorithmus mit o(n log n) Vergleichen?

Organic Computing: Peer-to-Peer-Netzwerke

Codierung, Codes (variabler Länge)

Algorithmen II Vorlesung am

Modelle und Statistiken

Algorithmen und Datenstrukturen

Export von Rhinoceros-Dateien in das STL-Format

Laufzeit und Komplexität

Übungen für Woche 10

Teil III: Routing - Inhalt I. Literatur. Geometric Routing. Voraussetzungen. Unit Disk Graph (UDG) Geometric Routing 29

Informatik II Greedy-Algorithmen

Ferienakademie 2001: Kryptographie und Sicherheit offener Systeme. Faktorisierung. Stefan Büttcher

Datenbankanwendung. Prof. Dr.-Ing. Sebastian Michel TU Kaiserslautern. Wintersemester 2014/15.

Binary Space Partitioning Trees: Konzepte und Anwendungen

Lernziele: Ausgleichstechniken für binäre Bäume verstehen und einsetzen können.

Randomisierte Algorithmen

Gittergenerierungsmethoden zur Finite Elemente Simulation aus Bilddaten

Steinerbäume. Seminarausarbeitung Hochschule Aalen Fakultät für Elektronik und Informatik Studiengang Informatik Schwerpunkt Software Engineering

CPM: A Deformable Model for Shape Recovery and Segmentation Based on Charged Particles. Stefan Fleischer, Adolf Hille

Algorithmen und Datenstrukturen Balancierte Suchbäume

Sortierverfahren für Felder (Listen)

Algorithmentheorie Maximale Flüsse

Praktikum Planare Graphen

Beispiel 19. December 4, 2009

Seminarvortag zum Thema Virtual Private Network Design im Rahmen des Seminars Network Design an der Universität Paderborn

6 Baumstrukturen. Formale Grundlagen der Informatik I Herbstsemester Robert Marti

Teile und Herrsche Teil 2

Sortieren durch Einfügen. Prof. Dr. W. Kowalk Sortieren durch Einfügen 1

Überblick. Lineares Suchen

Programmierkurs Java

Transkript:

Vorlesung Algorithmische Geometrie INSTITUT FÜR THEORETISCHE INFORMATIK FAKULTÄT FÜR INFORMATIK Martin Nöllenburg 19.06.2012

Motivation: Meshing von Platinenlayouts Zur Simulation der Hitzeentwicklung auf Platinen kann man die finite Elemente Methode (FEM) einsetzen: zerlege die Platine in kleine homogene Elemente (z.b. Dreiecke) Mesh eigene Hitzeentwicklung und Einfluss auf Nachbarn je Element bekannt approximiere numerisch die gesamte Hitzeentwicklung der Platine Qualitätseigenschaften von FEM: je feiner das Mesh desto besser die Approximation je gröber das Mesh desto schneller die Berechnung je kompakter die Elemente desto schneller die Konvergenz Ziel: adaptive Meshgröße (klein an Materialgrenzen, sonst gröber) wohlgeformte Dreiecke (nicht zu schmal)

Adaptive Dreiecksnetze Geg.: Quadrat Q = [0, U] [0, U] für Zweierpotenz U = 2 j mit oktilinearen, ganzzahligen Polygonen im Inneren. unzulässige Dreiecksknoten Ges.: Dreiecksnetz für Q mit folgenden Eigenschaften keine Dreiecksknoten im Inneren von Dreieckskanten

Adaptive Dreiecksnetze Geg.: Quadrat Q = [0, U] [0, U] für Zweierpotenz U = 2 j mit oktilinearen, ganzzahligen Polygonen im Inneren. nicht Teil des Dreiecksnetzes Ges.: Dreiecksnetz für Q mit folgenden Eigenschaften keine Dreiecksknoten im Inneren von Dreieckskanten Eingabekanten müssen Teil des Dreiecksnetzes sein

Adaptive Dreiecksnetze Geg.: Quadrat Q = [0, U] [0, U] für Zweierpotenz U = 2 j mit oktilinearen, ganzzahligen Polygonen im Inneren. unzulässige Winkel Ges.: Dreiecksnetz für Q mit folgenden Eigenschaften gültig { keine Dreiecksknoten im Inneren von Dreieckskanten Eingabekanten müssen Teil des Dreiecksnetzes sein Dreieckswinkel zwischen 45 und 90

Adaptive Dreiecksnetze Geg.: Quadrat Q = [0, U] [0, U] für Zweierpotenz U = 2 j mit oktilinearen, ganzzahligen Polygonen im Inneren. Ges.: Dreiecksnetz für Q mit folgenden Eigenschaften gültig { uniformes Dreiecksnetz keine Dreiecksknoten im Inneren von Dreieckskanten Eingabekanten müssen Teil des Dreiecksnetzes sein Dreieckswinkel zwischen 45 und 90 adaptiv, d.h. fein an den Polygonkanten, sonst gröber Kennen wir schon sinnvolle Triangulierungen für Q?

Delaunay-Triangulierung? maximiert kleinste Winkel ist definiert für Punkte und ignoriert vorhandene Kanten

Delaunay-Triangulierung? maximiert kleinste Winkel ist definiert für Punkte und ignoriert vorhandene Kanten kann trotzdem sehr kleine Winkel produzieren

Delaunay-Triangulierung? maximiert kleinste Winkel ist definiert für Punkte und ignoriert vorhandene Kanten kann trotzdem sehr kleine Winkel produzieren verwendet keine zusätzlichen Steiner-Punkte Winkel zulässig, aber uniform Winkel zulässig und adaptiv 512 Dreiecke 52 Dreiecke

Quadtrees Def.: Ein Quadtree ist ein Wurzelbaum, in dem jeder innere Knoten vier Kinder hat. Jeder Knoten entspricht einem Quadrat und die Quadrate der Blätter bilden eine Unterteilung des Wurzelquadrats. Kanten Seiten NO NW SW SO Ecken Nachbarn

Quadtrees Def.: Ein Quadtree ist ein Wurzelbaum, in dem jeder innere Knoten vier Kinder hat. Jeder Knoten entspricht einem Quadrat und die Quadrate der Blätter bilden eine Unterteilung des Wurzelquadrats. Def.: Für eine Punktmenge P in einem Quadrat Q = [x Q, x Q ] [y Q, y Q ] gilt für den Quadtree T (P ) ist P 1, so ist T (P ) ein Blatt, das P und Q speichert sonst sei x mid = x Q+x Q und y 2 mid = y Q+y Q und 2 P NO := {p P p x > x mid and p y > y mid } P NW := {p P p x x mid and p y > y mid } P SW := {p P p x x mid and p y y mid } P SO := {p P p x > x mid and p y y mid } T (P ) besteht aus Wurzel v, die Q speichert, mit vier Kindern für P i und Q i (i {NO, NW, SW, SO}).

Beispiel

Quadtree Eigenschaften Die rekursive Definition eines Quadtrees lässt sich direkt in einen Algorithmus zur Konstruktion umsetzen. Welche Tiefe hat ein Quadtree für n Punkte? Lemma 1: Die Tiefe von T (P ) ist höchstens log(s/c) + 3/2, wobei c der kleinste Abstand in P ist und s die Seitenlänge des Wurzelquadrats Q. Satz 1: Ein Quadtree T (P ) für n Punkte und mit Tiefe d hat O((d + 1)n) Knoten und kann in O((d + 1)n) Zeit konstruiert werden.

Nachbarn finden NorthNeighbor(v, T ) Input: Knoten v in Quadtree T Output: tiefster Knoten v nicht tiefer als v mit v.q nördl. Nachbar von v.q if v = root(t ) then return nil π parent(v) if v = SW -/SO-Kind von π then return NW -/NO-Kind von π µ NorthNeighbor(π, T ) if µ = nil oder µ Blatt then return µ else if v = NW -/NO-Kind von π then return SW -/SO-Kind von µ Satz 2: Sei T ein Quadtree mit Tiefe d. Der Nachbar eines Knotens v in beliebiger Richtung kann in O(d + 1) Zeit gefunden werden.

Balancierte Quadtrees Def.: Ein Quadtree heißt balanciert, wenn die Seitenlänge von je zwei Nachbarquadraten in der zugeh. Unterteilung sich um einen Faktor von höchstens 2 unterscheidet.

Quadtrees balancieren BalanceQuadtree(T ) Input: Quadtree T Output: balancierter Quadtree T L Liste aller Blätter von T while L nicht leer do µ extrahiere Blatt aus L if µ.q zu groß then Teile µ.q in vier Teile und lege vier Blätter in T an füge neue Blätter zu L hinzu if µ.q hat jetzt zu große Nachbarn then füge sie zu L hinzu return T Satz 3: Sei T ein Quadtree mit m Knoten und Tiefe d. Die balancierte Version T B von T hat O(m) Knoten und kann in O((d + 1)m) Zeit konstruiert werden.

Quadtrees und adaptive Dreiecksnetze Erinnerung: Geg.: Quadrat Q = [0, U] [0, U] für Zweierpotenz U = 2 j mit oktilinearen, ganzzahligen Polygonen im Inneren. Ges.: Dreiecksnetz für Q mit folgenden Eigenschaften gültig { Idee: keine Dreiecksknoten im Inneren von Kanten Eingabekanten müssen Teil des Dreiecksnetzes sein Dreieckswinkel zwischen 45 und 90 adaptiv, d.h. fein an den Polygonkanten, sonst gröber Quadrate und Kanten sind abgeschlossen Nutze Quadtree als Ausgangsbasis für das Dreiecksnetz! Anpassung: Zerteile Quadrate bis sie nicht mehr von Polygon geschnitten werden oder Größe 1 haben

Vom Quadtree zum Dreiecksnetz Beob.: wenn das Innere eines Quadrats im Quadtree geschnitten wird, dann durch Diagonale Wie bekommt man ein gültiges Dreiecksnetz? Knoten im Kanteninneren Diagonalen für alle verbleibenden Quadrate?

Vom Quadtree zum Dreiecksnetz Beob.: wenn das Innere eines Quadrats im Quadtree geschnitten wird, dann durch Diagonale Wie bekommt man ein gültiges Dreiecksnetz? zu kleine Dreieckswinkel Diagonalen für alle verbleibenden Quadrate? Nutze Unterteilungsknoten in Triangulierung? nein!

Vom Quadtree zum Dreiecksnetz Beob.: wenn das Innere eines Quadrats im Quadtree geschnitten wird, dann durch Diagonale Wie bekommt man ein gültiges Dreiecksnetz? Diagonalen für alle verbleibenden Quadrate? Nutze Unterteilungsknoten in Triangulierung? nein! nein! Balanciere Quadtree und füge ggf. einen Steinerknoten ein!

Algorithmus ErzeugeMesh(S) Input: Menge S oktilinearer, ganzzahliger Polygone in Q = [0, 2 j ] [0, 2 j ] Output: gültiges, adaptives Dreiecksnetz für S T CreateQuadtree T BalanceQuadtree(T ) D DCEL für Unterteilung von Q durch T foreach Facette f in D do if int(f) S then füge entsprechende Diagonale in f zu D hinzu else if Knoten nur an Ecken von f then füge eine Diagonale in f zu D hinzu else erzeuge Steiner-Punkt in der Mitte von f und verbinde in D zu allen Knoten auf f return D

Zusammenfassung Satz 4: Für eine Menge S disjunkter, oktilinearer, ganzzahliger Polygone mit Gesamtumfang p(s) in einem Quadrat Q = [0, U] [0, U] kann in O(p(S) log 2 U) Zeit ein gültiges adaptives Dreiecksnetz mit O(p(S) log U) Dreiecken erzeugt werden.

Diskussion Gibt es auch Quadtree-Varianten mit linearer Größe in n? Ja, wenn man innere Knoten mit nur einem nicht-leeren Kind kontrahiert bekommt man einen sog. komprimierten Quadtree (s. Übung); eine weitere Verbesserung sind Skip Quadtrees mit Größe O(n) und Einfügen, Löschen und Suchen in O(log n) Zeit [Eppstein et al., 05] Welche weiteren Anwendungen gibt es? Quadtrees werden in der Praxis häufig eingesetzt in Computergrafik, Bildverarbeitung, GIS etc., u.a. für Range Queries, obwohl sie theoretisch schlechter abschneiden als z.b. Range Trees oder kd-trees. (s. Übung) Wie immer: höhere Dimensionen? Quadtrees lassen sich problemlos auf höhere Dimensionen verallgemeinern. Sie heißen dann auch Octrees.