Beispiel

Transcrição

Beispiel
3/17/08
C
G
C
Erweiterung
C
G
C
Beispiel
 Problem: welche Fläche zu welcher Kante benachbart ist, kann
nicht direkt beantwortet werden.
 Lösung: die Kanten erhalten je einen Zeiger auf die zugehörige
e11
Fläche bei positivem bzw. negativem Durchlauf, e.fcw, e.fccw
auf die Vorgänger-
v5
e8
e6
e7
e.ncw
e5
e4
Kanten
e.pccw
 Abstrakte
e.dest
4
Notation der
Half-EdgeDatenstruktur:
2
e.fcw
e
2
v0
v3
e0
v2
e2
e1
v1
e.pcw
1, sign
V
e3
e.org
e.fccw
E
v6
e9
v4
 Zusätzlich: speichere Zeiger
G. Zachmann
e10
v7
e.nccw
F
Computer-Graphik 1 - WS 07/08
Randrepräsentationen
G. Zachmann
25
Vertexliste
v
coord
0 0.0
0.0
1 1.0
0.0
2 1.0
1.0
3 0.0
1.0
4 0.0
0.0
5 1.0
0.0
6 1.0
1.0
7 0.0
1.0
0.0
0.0
0.0
0.0
1.0
1.0
1.0
1.0
Kantenliste
e org dest
0 0
1
1 1
2
2 2
3
3 3
0
4 0
4
5 1
5
6 2
6
7 3
7
8 4
5
9 5
6
10 6
7
11 7
4
nccw
e4
e5
e6
e7
e3
e0
e1
e2
e11
e8
e9
e10
ncw
e1
e2
e3
e0
e8
e9
e10
e11
e5
e6
e7
e4
Facetten
0 e0 +
1 e8 +
2 e5 +
3 e6 +
4 e11 +
5 e8 -
pvw
e3
e0
e1
e2
e0
e1
e2
e3
e4
e5
e6
e7
Computer-Graphik 1 - WS 07/08
pccw
e5
e6
e7
e4
e11
e8
e9
e10
e9
e10
e11
e8
fcw
f0
f0
f0
f0
f1
f2
f3
f4
f1
f2
f3
f4
fccw
f1
f2
f3
f4
f4
f1
f2
f3
f5
f5
f5
f5
Randrepräsentationen
26
C
G
C
 Noch ein kleines Problem:
Abfragen der Form "welche
Kanten sind inzident zu einem
best. Vertex?" sind ein Problem
 Lösung: speichere zu jedem
Vertex einen Index auf eine
beliebige inzidente Kante
e11
e10
v7
v6
e9
v4
v5
e8
e6
e7
e5
e4
e3
v0
G. Zachmann
v3
e0
v2
e2
e1
v1
Computer-Graphik 1 - WS 07/08
Vertexliste
v
coord
0 0.0
0.0
1 1.0
0.0
2 1.0
1.0
3 0.0
1.0
4 0.0
0.0
5 1.0
0.0
6 1.0
1.0
7 0.0
1.0
Kantenliste
e org dest
0 0
1
1 1
2
2 2
3
3 3
0
4 0
4
5 1
5
6 2
6
7 3
7
8 4
5
9 5
6
10 6
7
11 7
4
ncw
e1
e2
e3
e0
e8
e9
e10
e11
e5
e6
e7
e4
C
G
C
4
0.0
0.0
0.0
0.0
1.0
1.0
1.0
1.0
e
0
1
2
3
8
9
10
11
nccw
e4
e5
e6
e7
e3
e0
e1
e2
e11
e8
e9
e10
pvw
e3
e0
e1
e2
e0
e1
e2
e3
e4
e5
e6
e7
Facetten
0 e0 +
1 e8 +
2 e5 +
3 e6 +
4 e11 +
5 e8 -
 Abstrakte Notation der endgülten
Winged-Edge-Datenstruktur:
E
2
 Alle Nachbarschafts-Abfragen lassen sich in Zeit
O(k) durchführen! (k = Größe der Ausgabe)
fcw
f0
f0
f0
f0
f1
f2
f3
f4
f1
f2
f3
f4
fccw
f1
f2
f3
f4
f4
f1
f2
f3
f5
f5
f5
f5
Randrepräsentationen
27
F
 Problem: wenn man sich an einer Kante entlang
"hangeln" möchte, muß man jedesmal testen,
wie die Kante orientiert ist, um zu wissen, ob
man ncw oder nccw verfolgen muß!
e.ncw
e.pccw
e.dest
G. Zachmann
Computer-Graphik 1 - WS 07/08
e.fcw
e
e.fccw
if ( e.pcw.dest == e.org )
e = e.ncw;
else
e = e.nccw;
1, sign
V
 3 direkte Abfragen und 6 Abfragen durch lokales
Umrunden einer Facette oder eines Vertex
pccw
e5
e6
e7
e4
e11
e8
e9
e10
e9
e10
e11
e8
1 2
e.org
e.pcw
e.nccw
Randrepräsentationen
28
1
3/17/08
Doubly-Connected Edge List
[Preparata & Müller, 1978]
C
G
C
 In der Computer-Graphik eher bekannt als "half-edge data
C
G
C
2
 Abstrakte Notation:
structure"
 Hier kein eigener Zeiger Start-Vertex
 Ist die effizienteste und einfachste Nachbarschaftsdatenstruktur
E
für Start-Vertex
1
 Benötigt doppelt so viele Einträge in der
 Idee:
E-Tabelle wie die Winged-Edge-DS
 Wie Winged-Edge-DS, aber mit "gespaltenen" Kanten
V
1 1
1
F
 Eine Kante (= Eintrag in der Kantentabelle) ist nur noch für eine Richtung
und eine Seite zuständig
e.next
 Zeiger pro Halb-Kante:
e.dest
- "Twin" (twin | opposite)
- Start- (org) und End-Vertex (dest)
e.face
e
e.twin
- Inzident face (zur Rechten)
e.org
e.prev
- Next und previous edge (im Umlaufsinn)
- Start-Vertex kann man einsparen, da e.org = e.twin.dest
G. Zachmann
Computer-Graphik 1 - WS 07/08
Randrepräsentationen
Vertexliste
v
coord
0 0.0
0.0
1 1.0
0.0
2 1.0
1.0
3 0.0
1.0
4 0.0
0.0
5 1.0
0.0
6 1.0
1.0
7 0.0
1.0
22
v7
21
v6
23
16
v5
20
19
17
V1
13
10
14
9
12
4
15
2
3
1
5
8
7
6
11
0
G. Zachmann
Randrepräsentationen
30
e
0
1
2
3
4
9
13
16
0.0
0.0
0.0
0.0
1.0
1.0
1.0
1.0
Facetten
0 e20
1 e4
2 e0
3 e15
4 e16
5 e8
C
G
C
 Visualisierung für ein Quad-Mesh:
18
v2
v3
V0
Computer-Graphik 1 - WS 07/08
C
G
C
Beispiel
v4
G. Zachmann
29
Computer-Graphik 1 - WS 07/08
Halbkantenliste
e org nxt prv
0 0
1
3
1 1
2
0
2 2
3
1
3 3
0
2
4 4
5
7
5 5
6
4
6 1
7
5
7 0
4
6
8 1
9
11
9 5
10
8
10 6
11
9
11 2
8
10
twin
6
11
15
18
20
8
0
17
5
23
12
1
e
12
13
14
15
16
17
18
19
20
21
22
23
org
2
6
7
3
7
4
0
3
5
4
7
6
nxt prv twin
13 15 10
14 12 22
15 13 19
12 14 2
17 19 21
18 16 7
19 17 3
16 18 14
21 23 4
22 20 16
23 21 13
20 22 9
Randrepräsentationen
31
G. Zachmann
Computer-Graphik 1 - WS 07/08
Randrepräsentationen
32
2
3/17/08
C
G
C
Invarianten in einer DCEL
 Verwende im folgenden die "Funktionen-Notation", d.h.,
 Gesucht: alle Vertices, die inzident zu einem geg. Face f sind
twin(e) = e.twin
 Pseudo-Code:
 Invarianten (bzw. Axiome im ADT "DCEL"):
 twin( twin(e) ) = e , falls das Mesh geschlossen ist
 org( next(e) ) = dest(e)
 org(e) = dest( twin(e) )
[falls twin(e) existiert]
 v.edge.org = v
[v zeigt immer auf eine "abgehende" Kante!]
Computer-Graphik 1 - WS 07/08
 Pseudo-Code:
Randrepräsentationen
G. Zachmann
33
C
G
C
Anwendungsbeispiel
 Simplifizierung: Grobes Mesh aus einem gegebenen "feinen"
e_start ← f.edge
e ← e_start
repeat
output e.dest
e ← e.next
until e == e_start
e
f
 Aufgabe: zu geg. Vertex v alle benachbarten Vertices liefern
 etc. …
G. Zachmann
C
G
C
Beispiele für das "Abwandern" der Topologie
e_start ← v.edge
e ← e_start
repeat
output e
if e.org == v:
e ← e.twin
e ← e.next
until e == e_start
Computer-Graphik 1 - WS 07/08
v
e.next
e
Randrepräsentationen
34
C
G
C
Halbkanten DS für Nicht-Mannigfaltigkeiten
 Halbkanten DS repräsentiert 2-Mannigfaltigkeiten
Mesh erzeugen
 „Directed Edge DS“: Erweiterung von Halbkanten DS für
 Dabei Einhaltung bestimmter Kriterien (wird hier nicht weiter vertieft)
Dreiecksnetze, die an Ausnahmestellen keine Mannigfaltigkeit
 Elementare Operationen:
sind.
 Edge Collapse:
 Idee: Pointer auf Nachbar-Kanten als Integer Array-Index
 Benutze Vorzeichen des Index als Hinweis auf zusätzliche Information
- Benötigt alle Kanten adjazent zu e
 Interpretiere negative Indizes als Indizes zusätzlicher Arrays, z.B.
 Vertex Removal:
- Liste aller Kanten, die von Vertex ausgehen, oder
- Zusammenhangskomponenten an Vertex
- Benötigt alle Kanten inzident zu v
G. Zachmann
Computer-Graphik 1 - WS 07/08
Randrepräsentationen
35
G. Zachmann
Computer-Graphik 1 - WS 07/08
Randrepräsentationen
38
3
3/17/08
C
G
C
Die Euler-Formel
 Beschreibt Zusammenhang zwischen Anzahl #Vertices, #Kanten
C
G
C
Beweis (nach Cauchy)
 Gegeben: geschlossenes Mesh (Polyeder)
und #Facetten eines Polyeders:
 Erste Idee:
 V, E, F = Anzahl Vertices, Edges, Faces
 Entferne eine Facette (ergibt offenes Mesh; Rand ist genau der
 Beispiel:
Kantenzug der entfernten Facette)
V=8
E = 12
F =6
V=8
E = 12+1
F = 6 +1
 Ziehe Mesh an diesem Rand auseinander in planaren Graphen (geht
V = 8+1
E = 12+1+1
F = 6 +1
nur, wenn Polyeder homöomorph zu Kugel)
 Jetzt zu zeigen:
 Zweite Idee: trianguliere den Graphen (das Mesh)
 Satz (Eulerformel):
 Ziehe Diagonale in Facetten mit mehr als 3 Vertices ein
Für alle Polyeder, die homöomorph zu einer Kugel sind, gilt
 Es gilt weiterhin
G. Zachmann
Computer-Graphik 1 - WS 07/08
Randrepräsentationen
G. Zachmann
45
C
G
C
 Der Graph hat einen Rand; Dreiecke haben 0, 1, oder 2 "Randkanten"
Computer-Graphik 1 - WS 07/08
Randrepräsentationen
46
C
G
C
Anwendungen der Euler-Formel
 Zusammenhang zwischen #Dreiecken und
#Vertices in einem geschlossenen Dreiecks-Mesh:
 Wiederhole eine der folgenden beiden Transformartionen
 Jede Kante gehört zu genau 2 Dreiecken, also
 Falls es ein Dreieck mit genau 1 Randkante gibt,
lösche dieses Dreieck; es gilt
 Einsetzen in Euler-Formel:
 Falls es ein Dreieck mit genau 2 Randkanten gibt,
lösche dieses Dreieck; es gilt
 Bei großen Meshes gilt also
 Wiederhole, bis nur noch 1 Dreieck übrig
 Für das Dreieck gilt die Euler-Formel offensichtlich
 Da jede der obigen Transformationen den Wert von V-E+F unverändert
gelassen hat, gilt die Formel also auch für den ursprünglichen Graphen,
und damit auch für das ursprüngliche Mesh.
G. Zachmann
Computer-Graphik 1 - WS 07/08
Randrepräsentationen
47
G. Zachmann
Computer-Graphik 1 - WS 07/08
Randrepräsentationen
48
4
3/17/08
C
G
C
 Platonische Körper:
C
G
C
 Exkurs: die platonischen Polyeder waren mindest 1000 Jahre vor
Plato schon in Schottland bekannt
 Definition: ein konvexes Polyeder, das aus lauter gleichen
(kongruenten) regulären Polygonen besteht.
 Satz (Euklid):
Es gibt genau fünf platonische Körper.
G. Zachmann
Computer-Graphik 1 - WS 07/08
Randrepräsentationen
G. Zachmann
49
Computer-Graphik 1 - WS 07/08
Randrepräsentationen
50
C
G
C
Beweis
 Alle Facetten haben die gleiche Anzahl Kanten, n; also:
C
G
C
 Weitere Bedingung: m und n müssen jeweils > 3 sein
 Welche {m,n} erfüllen diese Bedingungen:
{3,3}
{3,4}
{4,3}
{5,3}
{3,5}
 An allen Vertices treffen sich die gleiche Anzahl Kanten, m; also
 Einsetzen in die Euler-Formel:
 Ergibt folgende Bedingung für m und n:
G. Zachmann
Computer-Graphik 1 - WS 07/08
Randrepräsentationen
51
G. Zachmann
Computer-Graphik 1 - WS 07/08
Randrepräsentationen
52
5
3/17/08
C
G
C
Die Euler-Charakteristik
 Achtung: die Euler-Formel gilt so nur für Polyeder, die topologisch
C
G
C
 Definition Euler-Charakteristik:
äquivalent zur Kugel sind!
 Beispiele:
Tetrahemihexahedron
Octahemioctahedron
 Beispiele:
Cubohemioctahedron
2
6 - 12 + 7 = 1
12 - 24 + 12 = 0
V
E
F
12 - 24 + 10 = -2
0
-4
-2
0
0
 Aber: die Größe V-E+F bleibt erhalten, egal wie man das Polyeder
verformt (homöomorph) → topologische Invariante
G. Zachmann
Computer-Graphik 1 - WS 07/08
Randrepräsentationen
G. Zachmann
53
Computer-Graphik 1 - WS 07/08
Randrepräsentationen
54
C
G
C
Die Euler-Poincaré-Formel
 Verallgemeinerung der Euler-Formel auf 2-mannigfaltige,
C
G
C
 Beispiele:
geschlossene Flächen:
 V = 16, E = 28, F = 14, S = 1, G = 0:
V - E + F = 2 = 2(S - G)
 G = # Henkel , S = # Shells (Schalen)
 Henkel (Loch, hole) = eine Schnur im Inneren eines Henkels kann man
nicht auf einen Punkt zusammenziehen
 V = 16, E = 32, F = 16, S = 1, G = 1:
 G = Genus
V - E + F = 0 = 2(S - G)
 Schale (shell) = durch Wandern auf der Schale kann man jeden Punkt
von jedem anderen aus erreichen
 Durch "innere" Schalen kann man sog. "Voids" (Aushöhlungen) aus
 V = 16+8, E = 32+12, F = 16+6,
einem Körper herausnehmen
G = 1, S = 2:
 Es gibt noch weitere Verallgemeinerungen!
G. Zachmann
Computer-Graphik 1 - WS 07/08
V - E + F = 2 = 2(S - G)
Randrepräsentationen
55
G. Zachmann
Computer-Graphik 1 - WS 07/08
Randrepräsentationen
56
6
3/17/08
C
G
C
 Achtung: der Genus ist manchmal nicht ganz einfach zu
bestimmen!
 Beispiel:
 Genus = 2
 "Beweis": topologisch
äquivalent deformieren,
bis Genus klar ist
1.
G. Zachmann
Computer-Graphik 1 - WS 07/08
2.
3.
Randrepräsentationen
57
7

Documentos relacionados