Was bisher geschah
I Motivation, Beispiele
I geometrische Objekte imR2:
Punkt, Gerade, Halbebene, Strecke, Polygon
I maschinelle Repräsentation geometrischer Objekte
I konvexe Mengen imRd
I konvexe Hülle conv(P)endlicher PunktmengenP⊆Rd
I Beobachtungen im SpezialfallR2:
I conv(P)ist ein Polygon
(EckenfolgeH= [q0, . . . ,qm−1]im Uhrzeigersinn)
I ∀p,q∈P:pqKante von conv(P)gdw.
∀r ∈P:rliegt auf oder rechts vonpq
I Entwurf des Algorithmus conv-1
I Nachteile des Algorithmus conv-1:
I LaufzeitO(n3)sehr hoch
I kaumrobust
I in Spezialfällen und
I gegenüber Rundungsfehlern
Konvexe Hülle – bessere Idee
inkrementellerAlgorithmus:
I Durchlaufen der Punkte inP in einer sinnvollen
Reihenfolge und gleichzeitige Erzeugung / Anpassung von Zusatzinformationen
I Repräsentation (und Verarbeitung) vonPals geordnete Menge (Folge)[p1, . . . ,pm]
I Ordnung aufsteigend nachx-Koordinate
(Punkte werden von links nach rechts verarbeitet)
I Berechnung der konvexen Hülle in zwei Durchläufen, oberenundunterenTeil
Obere und untere konvexe Hülle
gegeben:
P= [p1, . . . ,pn]aufsteigend geordnet nachx-Koordinate
[q0, . . . ,qk]istobere (untere) konvexe HüllevonP gdw.
1. [q0, . . . ,qk]zusammenhängende Teilfolge der
(evtl. zyklisch verschobenen) Eckenfolge von conv(P), 2. q0=p1(für untere konvexe Hülleq0=pn)
3. qk =pn(für untere konvexe Hülleqk =p1)
Beobachtung:HoundHuenthalten keine „Linkskurven“
fürHo0 = [q0, . . . ,q|Ho|−1](tail(Ho)) undHu0 = [q0, . . . ,q|Hu|−1](tail(Hu)) gilt:
Ho0 ◦Hu0 =H (Eckenfolge von conv(P))
Berechnung der oberen konvexen Hülle
gegeben:
P= [p1, . . . ,pn], aufsteigend nachx-Koordinate geordnet
Idee: Linksabbiegen verboten (konvex)
schrittweise Berechnung der oberen konvexe HülleH0: in jedem Schrittk:
I Punkte[p1, . . . ,pk]sind abgearbeitet, dabei wurdeHo= [q1, . . . ,qi]berechnet (mitgeführte Zusatzinformation)
I nächsten Kandidatenpk+1anHoanhängen (Ho←Ho◦pk+1)
I fallspk+1nicht rechtsvonqi−1qi,
Korrekturder FolgeHo= [q1, . . . ,qi−1,qi,pk+1]notwendig:
solangepk+1nicht rechts vonqi−1qi:
qi ausHoentfernen und Rechts-Test füri ←i−1 wiederholen
I sonst ok
Warum „nicht rechts von“ statt „links von“?
Konvexe Hülle – Algorithmus 2
Algorithmus : conv-2 Eingabe:P⊆R2endlich
Ausgabe:H= [q0, . . . ,qm−1] (Eckenfolge von conv(P))
[p1, . . . ,pn]←Paufsteigend nachx-Koordinate sortieren
Ho←[p1,p2] (Berechnung obere konvexe Hülle) für jedesk ←3, . . . ,n:
Ho←Ho◦pk
solange|Ho| ≥2und q|Ho|nicht rechts von(q|Ho|−2,q|Ho|−1): q|Ho|−1ausHoentfernen (vorletzter Punkt)
Hu←[pn,pn−1] (Berechnung untere konvexe Hülle) für jedesk ←n−2, . . . ,1:
Hu←Hu◦pk
solange|Hu| ≥2und q|Hu|nicht rechts von(q|Hu|−2,q|Hu|−1): q|Hu|−1ausHuentfernen (vorletzter Punkt)
q|Ho|ausHoentfernen q|Hu|ausHuentfernen H=Ho◦Hu
Korrektheit des Algorithmus conv-2
(unter idealen Bedingungen, keine Rundungsfehler) Behauptung:
Die von conv-2 für eine endliche PunktmengeP ⊆R2 berechnete FolgeH ist eine Eckenfolge von conv(P).
Nachweis fürHo undHu getrennt (analog Berechnung) Ausgangspunkt:
[p1, . . . ,pn]ist die korrekt (lexikographisch) nachx-Koordinaten
aufsteigend geordnete Folge aller Punkte inP (durch korrektes Sortierverfahren bestimmt) zu zeigen: für jedesi∈ {2, . . . ,n}gilt:
Der nach Verarbeitung des Punktespi berechnete Teil vonHo
ist die obere konvexe Hülle der Punkte[p1, . . . ,pi].
Idee: Induktion übern(Tafel)
Laufzeit und Robustheit
Berechnung vonHo undHu jeweils∈O(n). Warum?
Sortieren vonnPunkten∈O(nlogn) Laufzeit:
L(conv-2) =L(Punkte-sortieren) +L(Ho) +L(Hu)∈O(nlogn) mögliche Probleme:
I P kann Punkte mit denselbenx-Koordinaten enthalten Lösung: lexikographische Ordnung (erstx, danny)
I P kann kollineare Punkte enthalten
kein Problem wegen Test auf „nicht rechts von “
I Rundungsfehler führen nicht zu strukturellen, sondern höchstens zu kleinen lokalen Fehlern (für die meisten Anwendungen harmlos)
lässt sich durch stärkeres Runden vermeiden, welches Punkte mit geringem Abstand zu einem zusammenfügt
Konvexe Hülle – Anwendungen
I Abschätzung von Kollisionsrisiken
I Hindernisumfahrung (Wegplanung)
I Mustererkennung
I Objekterkennung, Segmentierung in digitalen Bildern
I Texterkennung
I Bestimmung von Bounding-Boxen
I Gestenerkennung
(Volumenverhältnis von Objekt und konvexer Hülle)
I Bioinformatik
I Medizininformatik (Ausdehnung von Krankheitsherden)
I Verpackungstechnik
Schritte beim Entwurf geometrischer Algorithmen
1. Problemanalyse:
I Eingaben
I Ausgaben
I (mathematischer) Zusammenhang zwischen Ein- und Ausgaben
2. maschinelle Darstellung der Ein- und Ausgaben 3. Entwurf eines Lösungsalgorithmus
(zunächst Abstraktion von Spezialfällen und Rundungsfehlern)
4. Analyse von Robustheit und Ressourcenverbrauch des entworfenen Algorithmus
5. evtl. weitere Problemanalyse und Entwurf besserer Algorithmen
6. Implementierung mit Fehlerabschätzung