Zeichnen von Graphen

Werbung
Zeichnen von Graphen
Fabio Valdés
Programmierpraktikum
WS 2016/17
Lehrgebiet Datenbanksysteme für neue Anwendungen
FernUniversität in Hagen
Programmierpraktikum
Zeichnen von Graphen
08.10.2016
1 / 28
Gliederung
1 Einleitung
Problemstellung
Ziele
2 Einlesen des Graphen
Dateiformat
Korrektheitsprüfung
3 Zeichnen
Graphentheoretische Definitionen
Initialisierung
Planarisierung
Orthogonalisierung
Kompaktifizierung
4 Anzeige und Manipulation
5 Export
6 Optionale Erweiterungen
Programmierpraktikum
Zeichnen von Graphen
08.10.2016
2 / 28
Einleitung
Problemstellung
Problemstellung
Mathematik: Graph durch Knotenmenge, Kantenmenge und ggf.
Kantengewichte eindeutig definiert
graphische Darstellung: nicht eindeutig
1
5
2
4
3
3
1
2
4
1
2
3
4
5
5
Programmierpraktikum
Zeichnen von Graphen
08.10.2016
3 / 28
Einleitung
Ziele
Ziele in dieser Aufgabe
Einlesen eines Graphen aus einer Textdatei
Prüfung von Syntax und Semantik
Erzeugung einer platzsparenden Gitterdarstellung in vier Schritten
Initialisierung
Planarisierung
Orthogonalisierung
Kompaktifizierung
weitere Anpassung durch Benutzer
Export als SVG-Datei
Programmierpraktikum
Zeichnen von Graphen
08.10.2016
4 / 28
Einlesen des Graphen
Dateiformat
Gerichtete Graphen
V = {1, 2, 3, 4, 5}
E = {1-2, 2-3, 3-4, 4-1, 4--5, 3--5}
1
5
2
4
3
3
1
2
4
1
2
3
4
5
5
Programmierpraktikum
Zeichnen von Graphen
08.10.2016
5 / 28
Einlesen des Graphen
Dateiformat
Ungerichtete Graphen
V = {1, 2, 3, 4, 5}
E = {1-2, 2-3, 3-4, 4-1, 4--5, 3--5}u
1
5
2
4
3
3
1
2
4
1
2
3
4
5
5
Programmierpraktikum
Zeichnen von Graphen
08.10.2016
6 / 28
Einlesen des Graphen
Dateiformat
Kantenbeschriftungen & Knotenkategorien
V = {Z:Zentrale, F:Filiale, K1:Kunde, K2:Kunde}
E = {Z-F:25, Z-K1:30, Z-K2:35, F-K1:10, F-K2:17, K1-K2:8.5}u
25
Z
F
10
30
K1
Programmierpraktikum
35
8.5
17
K2
Zeichnen von Graphen
08.10.2016
7 / 28
Einlesen des Graphen
Dateiformat
Beispiel: ER-Diagramm
Programmierpraktikum
Zeichnen von Graphen
08.10.2016
8 / 28
Einlesen des Graphen
Korrektheitsprüfung
Eingabefehler
V = {Ü, $, ξ}
V = {A, B, C, A}
V = {X, Y, Z}
E = {X-Y, Y-A}
V = {1, 2, 2}
E = {1-2, 1-2}
Programmierpraktikum
Zeichnen von Graphen
08.10.2016
9 / 28
Zeichnen
Graphentheoretische Definitionen
Teilgraph
Ein Graph G ′ = (V ′ , E ′ ) heißt Teilgraph von G = (V , E ), falls V ′ ⊆ V und
E ′ ⊆ E ′ gelten.
1
2
1
3
2
3
4
5
4
5
G = ({1, 2, 3, 4, 5},
G ′ = ({3, 4, 5},
{(1, 2), (1, 4), (2, 3),
{(3, 4), (3, 5), (4, 5)})
(3, 4), (3, 5), (4, 5)})
Programmierpraktikum
Zeichnen von Graphen
08.10.2016
10 / 28
Zeichnen
Graphentheoretische Definitionen
Grad
Der Grad grad (v ) eines Knoten v ∈ V entspricht der Summe der Anzahlen
seiner ein- und ausgehenden Kanten, d.h.,
grad (v ) = |{(u, v ) ∈ E }| + |{(v , w ) ∈ E }|.
1
2
grad (1) = 2
grad (2) = 2
grad (3) = 4
grad (4) = 4
grad (5) = 4
3
4
Programmierpraktikum
5
Zeichnen von Graphen
08.10.2016
11 / 28
Zeichnen
Graphentheoretische Definitionen
Planarität
Ein Graph G heißt planar, falls er eine Einbettung in die Ebene besitzt, d.h.,
dass seine Kanten durch stetige, schnittpunktfreie Kurven dargestellt werden
können, die sich nur in ihren gemeinsamen Endpunkten schneiden.
1
1
2
2
3
4
planarer Graph G
Programmierpraktikum
3
4
Einbettung von G
Zeichnen von Graphen
08.10.2016
12 / 28
Zeichnen
Graphentheoretische Definitionen
Planarität
Ein Graph G heißt planar, falls er eine Einbettung in die Ebene besitzt, d.h.,
dass seine Kanten durch stetige, schnittpunktfreie Kurven dargestellt werden
können, die sich nur in ihren gemeinsamen Endpunkten schneiden.
1
2
3
4
5
nicht-planarer Graph
Programmierpraktikum
Zeichnen von Graphen
08.10.2016
12 / 28
Zeichnen
Graphentheoretische Definitionen
Weg & Kreis
Ein Weg von v1 nach vk in G = (V , E ) ist eine Folge (v1 , v2 ), . . . , (vk−1 , vk )
von Kanten, für v1 , . . . , vk ∈ V , (v1 , v2 ), . . . , (vk−1 , vk ) ∈ E .
Ein Kreis in G ist ein Weg mit v1 = vk .
Gibt es für alle u, v ∈ V höchstens einen Weg von u nach v , heißt G kreisfrei.
1
2
3
4
5
Weg von 1 nach 5: (1, 2), (2, 3), (3, 5)
Kreis von 1 nach 1: (1, 2), (2, 3), (3, 4), (4, 1)
Programmierpraktikum
Zeichnen von Graphen
08.10.2016
13 / 28
Zeichnen
Graphentheoretische Definitionen
Weg & Kreis
Ein Weg von v1 nach vk in G = (V , E ) ist eine Folge (v1 , v2 ), . . . , (vk−1 , vk )
von Kanten, für v1 , . . . , vk ∈ V , (v1 , v2 ), . . . , (vk−1 , vk ) ∈ E .
Ein Kreis in G ist ein Weg mit v1 = vk .
Gibt es für alle u, v ∈ V höchstens einen Weg von u nach v , heißt G kreisfrei.
1
2
3
4
5
kreisfreier Graph
Programmierpraktikum
Zeichnen von Graphen
08.10.2016
13 / 28
Zeichnen
Graphentheoretische Definitionen
Zusammenhang & Komponente
Ein ungerichteter Graph G = (V , E ) heißt zusammenhängend, falls es zu
jedem Paar v , w ∈ V einen Weg von v nach w gibt.
Ein maximaler zusammenhängender Teilgraph K von G heißt Komponente.
1
2
1
3
4
3
5
4
zusammenhängender Graph
Programmierpraktikum
2
5
zwei Komponenten eines nichtzusammenhängenden Graphen
Zeichnen von Graphen
08.10.2016
14 / 28
Zeichnen
Graphentheoretische Definitionen
k-Zusammenhang
Ein ungerichteter Graph G = (V , E ) heißt k-zusammenhängend, falls der
Graph (V \ V ′ , E \ {(v , w ) | v ∈ V ′ ∨ w ∈ V ′ }) für alle Mengen V ′ ⊂ V
mit weniger als k Knoten zusammenhängend ist.
5
5
4
3
1
2
2-zusammenhängend
Programmierpraktikum
4
3
2
zusammenhängend, aber i.A.
nicht 2-zusammenhängend
Zeichnen von Graphen
08.10.2016
15 / 28
Zeichnen
Graphentheoretische Definitionen
k-Zusammenhang
Ein ungerichteter Graph G = (V , E ) heißt k-zusammenhängend, falls der
Graph (V \ V ′ , E \ {(v , w ) | v ∈ V ′ ∨ w ∈ V ′ }) für alle Mengen V ′ ⊂ V
mit weniger als k Knoten zusammenhängend ist.
5
5
4
3
4
1
2
1
2-zusammenhängend
Programmierpraktikum
3
zusammenhängend, aber i.A.
nicht 2-zusammenhängend
Zeichnen von Graphen
08.10.2016
15 / 28
Zeichnen
Graphentheoretische Definitionen
k-Zusammenhang
Ein ungerichteter Graph G = (V , E ) heißt k-zusammenhängend, falls der
Graph (V \ V ′ , E \ {(v , w ) | v ∈ V ′ ∨ w ∈ V ′ }) für alle Mengen V ′ ⊂ V
mit weniger als k Knoten zusammenhängend ist.
5
5
4
3
4
1
2
1
2-zusammenhängend
Programmierpraktikum
2
zusammenhängend, aber i.A.
nicht 2-zusammenhängend
Zeichnen von Graphen
08.10.2016
15 / 28
Zeichnen
Graphentheoretische Definitionen
k-Zusammenhang
Ein ungerichteter Graph G = (V , E ) heißt k-zusammenhängend, falls der
Graph (V \ V ′ , E \ {(v , w ) | v ∈ V ′ ∨ w ∈ V ′ }) für alle Mengen V ′ ⊂ V
mit weniger als k Knoten zusammenhängend ist.
5
5
4
3
1
2
2-zusammenhängend
Programmierpraktikum
3
1
2
zusammenhängend, aber i.A.
nicht 2-zusammenhängend
Zeichnen von Graphen
08.10.2016
15 / 28
Zeichnen
Graphentheoretische Definitionen
k-Zusammenhang
Ein ungerichteter Graph G = (V , E ) heißt k-zusammenhängend, falls der
Graph (V \ V ′ , E \ {(v , w ) | v ∈ V ′ ∨ w ∈ V ′ }) für alle Mengen V ′ ⊂ V
mit weniger als k Knoten zusammenhängend ist.
5
4
3
1
2
2-zusammenhängend
Programmierpraktikum
4
3
1
2
zusammenhängend, aber i.A.
nicht 2-zusammenhängend
Zeichnen von Graphen
08.10.2016
15 / 28
Zeichnen
Graphentheoretische Definitionen
Dualer Graph
Zu einem planaren Graphen G ist der duale Graph G ∗ wie folgt definiert:
Fläche in G ←→ Knoten in G ∗
Kante in G ←→ Kante in G ∗
1
2
1
3
3
2
4
Programmierpraktikum
5
Zeichnen von Graphen
08.10.2016
16 / 28
Zeichnen
Graphentheoretische Definitionen
Dualer Graph
Zu einem planaren Graphen G ist der duale Graph G ∗ wie folgt definiert:
Fläche in G ←→ Knoten in G ∗
Kante in G ←→ Kante in G ∗
Programmierpraktikum
Zeichnen von Graphen
08.10.2016
16 / 28
Zeichnen
Initialisierung
Initialisierung
Theorie: initiale Positionen irrelevant
quadratische Grundstruktur
von links oben nach rechts unten
zuerst angegebene Knoten weiter links bzw. weiter oben
Programmierpraktikum
Zeichnen von Graphen
08.10.2016
17 / 28
Zeichnen
Planarisierung
Planarisierung
(a)
ursprünglicher Graph G = (V , E )
Programmierpraktikum
Zeichnen von Graphen
08.10.2016
18 / 28
Zeichnen
Planarisierung
Planarisierung
(b)
Aufteilung der Kanten in planare
und nichtplanare (gestrichelt)
Programmierpraktikum
Zeichnen von Graphen
08.10.2016
18 / 28
Zeichnen
Planarisierung
Planarisierung
(c)
nur noch planare Kanten; dualer
Graph (grau)
Programmierpraktikum
Zeichnen von Graphen
08.10.2016
18 / 28
Zeichnen
Planarisierung
Planarisierung
(d)
Hinzufügen der restlichen Kanten;
kürzester Weg im dualen Graphen
für nichtplanare Kante entspricht
minimaler Anzahl von
Kantenkreuzungen
Programmierpraktikum
Zeichnen von Graphen
08.10.2016
18 / 28
Zeichnen
Planarisierung
Planarisierung
(e)
neue Kante, neuer Knoten für
Kantenkreuzung; Aktualisierung
des dualen Graphen
Programmierpraktikum
Zeichnen von Graphen
08.10.2016
18 / 28
Zeichnen
Planarisierung
Planarisierung
(f)
vollständig planarisierter Graph
Programmierpraktikum
Zeichnen von Graphen
08.10.2016
18 / 28
Zeichnen
Orthogonalisierung
Übersicht
für jede Komponente des Graphen:
Sichtbarkeitsdarstellung
orthogonale Darstellung durch lokale Expansion
Begradigung der Kanten
Programmierpraktikum
Zeichnen von Graphen
08.10.2016
19 / 28
Zeichnen
Orthogonalisierung
Sichtbarkeitsdarstellung
Knoten → horizontale Segmente
Kanten → vertikale Segmente
keine Schnitte von Segmenten
Programmierpraktikum
Zeichnen von Graphen
08.10.2016
20 / 28
Zeichnen
Orthogonalisierung
Sichtbarkeitsdarstellung
Knoten → horizontale Segmente
Kanten → vertikale Segmente
keine Schnitte von Segmenten
Programmierpraktikum
Zeichnen von Graphen
08.10.2016
20 / 28
Zeichnen
Orthogonalisierung
Lokale Expansion
Programmierpraktikum
Zeichnen von Graphen
08.10.2016
21 / 28
Zeichnen
Orthogonalisierung
Lokale Expansion
Programmierpraktikum
Zeichnen von Graphen
08.10.2016
21 / 28
Zeichnen
Orthogonalisierung
Begradigung der Kanten
Programmierpraktikum
Zeichnen von Graphen
08.10.2016
22 / 28
Zeichnen
Kompaktifizierung
Kompaktifizierung
Programmierpraktikum
Zeichnen von Graphen
08.10.2016
23 / 28
Anzeige und Manipulation
Anzeige und Manipulation
Graph im Hauptfenster
Zoomen (Vergrößern und Verkleinern)
Scrollen (Balken einblenden, wenn nötig)
Markieren und Verschieben von Knoten und Kanten
mögliche Darstellungen für Knotenkategorien:
Kreis
Rechteck
Raute
Ellipse
jeweils einfach oder doppelt, oder ohne Umrandung
Programmierpraktikum
Zeichnen von Graphen
08.10.2016
24 / 28
Export
Export
Abspeichern des Graphen als SVG-Datei (Scalable Vector Graphics)
Textdatei
Linien
Kreise
Text
Programmierpraktikum
Zeichnen von Graphen
08.10.2016
25 / 28
Optionale Erweiterungen
Optionale Erweiterungen
Algorithmen
komplexere Algorithmen zur Planarisierung und Kompaktifizierung
weitere Algorithmen zur Zeichnung von Graphen
Auswahl der Verfahrens durch Benutzer
Anzeige
Ergebnisse der einzelnen Transformationsschritte
Auswahl von Farben, Schrifttypen, -größen, -farben für
Knotenkategorien und Kanten(beschriftungen)
Druckfunktion
Ausgabe auf Papier
PDF-Ausgabe
Export
EPS-Format
Programmierpraktikum
Zeichnen von Graphen
08.10.2016
26 / 28
Optionale Erweiterungen
Danke für Ihre Aufmerksamkeit.
Programmierpraktikum
Zeichnen von Graphen
08.10.2016
27 / 28
Optionale Erweiterungen
Quellenangabe
http://www.leda-tutorial.org/de/inoffiziell/ch05s03s07.html
http://www.rhinodidactics.de/Artikel/latex-2006-09-01.html
Di Battista, G., Eades, P., Tamassia, R. und Tollis, I.G.
Graph Drawing: Algorithms for the Visualization of Graphs.
Prentice-Hall, 1999
Tamassia, R. und Tollis, I.G. Planar grid embedding in linear time.
IEEE Transactions on Circuits and Systems, 36(9):1230-1234, 1989
Programmierpraktikum
Zeichnen von Graphen
08.10.2016
28 / 28
Herunterladen