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 3 4 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 3 4 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 3 4 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 Z 25 F 10 30 35 17 K1 8.5 K2 Programmierpraktikum 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
Graphentheoretische Definitionen Teilgraph Ein Graph G = (V,E ) heißt Teilgraph von G = (V,E), falls V V und E E gelten. 3 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
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}. 3 grad(1) = 2 grad(2) = 2 grad(3) = 4 grad(4) = 4 grad(5) = 4 4 5 Programmierpraktikum Zeichnen von Graphen 08.10.2016 11 / 28
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 planarer Graph G 3 4 Einbettung von G Programmierpraktikum Zeichnen von Graphen 08.10.2016 12 / 28
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. 3 4 5 nicht-planarer Graph Programmierpraktikum Zeichnen von Graphen 08.10.2016 12 / 28
Graphentheoretische Definitionen Weg & Kreis Ein Weg von v 1 nach v k in G = (V,E) ist eine Folge (v 1,v 2 ),...,(v k 1,v k ) von Kanten, für v 1,...,v k V,(v 1,v 2 ),...,(v k 1,v k ) E. Ein Kreis in G ist ein Weg mit v 1 = v k. Gibt es für alle u,v V höchstens einen Weg von u nach v, heißt G kreisfrei. 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
Graphentheoretische Definitionen Weg & Kreis Ein Weg von v 1 nach v k in G = (V,E) ist eine Folge (v 1,v 2 ),...,(v k 1,v k ) von Kanten, für v 1,...,v k V,(v 1,v 2 ),...,(v k 1,v k ) E. Ein Kreis in G ist ein Weg mit v 1 = v k. Gibt es für alle u,v V höchstens einen Weg von u nach v, heißt G kreisfrei. 3 4 5 kreisfreier Graph Programmierpraktikum Zeichnen von Graphen 08.10.2016 13 / 28
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. 3 3 4 5 zusammenhängender Graph 4 5 zwei Komponenten eines nichtzusammenhängenden Graphen Programmierpraktikum Zeichnen von Graphen 08.10.2016 14 / 28
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 3 2-zusammenhängend zusammenhängend, aber i.a. nicht 2-zusammenhängend 2 Programmierpraktikum Zeichnen von Graphen 08.10.2016 15 / 28
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 3 2-zusammenhängend 1 zusammenhängend, aber i.a. nicht 2-zusammenhängend Programmierpraktikum Zeichnen von Graphen 08.10.2016 15 / 28
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 2-zusammenhängend zusammenhängend, aber i.a. nicht 2-zusammenhängend Programmierpraktikum Zeichnen von Graphen 08.10.2016 15 / 28
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 3 2-zusammenhängend zusammenhängend, aber i.a. nicht 2-zusammenhängend Programmierpraktikum Zeichnen von Graphen 08.10.2016 15 / 28
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 4 3 2-zusammenhängend zusammenhängend, aber i.a. nicht 2-zusammenhängend Programmierpraktikum Zeichnen von Graphen 08.10.2016 15 / 28
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 3 3 2 4 5 Programmierpraktikum Zeichnen von Graphen 08.10.2016 16 / 28
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
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
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
Orthogonalisierung Sichtbarkeitsdarstellung Knoten horizontale Segmente Kanten vertikale Segmente keine Schnitte von Segmenten Programmierpraktikum Zeichnen von Graphen 08.10.2016 20 / 28
Orthogonalisierung Sichtbarkeitsdarstellung Knoten horizontale Segmente Kanten vertikale Segmente keine Schnitte von Segmenten Programmierpraktikum Zeichnen von Graphen 08.10.2016 20 / 28
Orthogonalisierung Lokale Expansion Programmierpraktikum Zeichnen von Graphen 08.10.2016 21 / 28
Orthogonalisierung Lokale Expansion Programmierpraktikum Zeichnen von Graphen 08.10.2016 21 / 28
Orthogonalisierung Begradigung der Kanten Programmierpraktikum Zeichnen von Graphen 08.10.2016 22 / 28
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