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