Animierte Erforschung von Dynamischen Graphen mit Radialer Anordnung

Programmieraufgabe im Rahmen der Lehrveranstaltung
VU Informationsvisualisierung SS 2005

Florian Schöllhammer, 0325948


Inhaltsverzeichnis


Einführung

Obwohl es schon sehr viele Methoden gibt, um Graphen zu visualisieren, macht es dennoch Sinn, sich mit neuen Methoden auseinanderzusetzen, da jede ihre eigenen Stärken hat.

Diese Visualisierungs-Methode ist speziell geeignet, um (auch komplexe) Graphen einfach zu durchbrowsen um generelles Verständnis des Netzwerkes zu erhalten. Es wird dazu ein Knoten ausgewählt, für den man sich interessiert. Da sich alle anderen Knoten des Netzwerkes kreisförmig um den ausgewählten Knoten im Zentrum anordnen, ist leicht zu erkennen, wie der Knoten im Zusammenhang mit dem Rest des Netzwerkes steht. Selektiert man nun einen weiteren Knoten, so rutscht dieser in ins Zentrum.
Um bei dieser Veränderung nicht den Überblick zu verlieren, wird die Bewegung aller Knoten animiert.


Funktionsprinzip

Der Knoten in Zentrum

Wie schon erwähnt, kann der Benutzer den interessierenden Knoten selbst wählen. Von diesem ausgehend wird dann ein Baum durch das restliche Netzwerk aufgebaut (Vorraussetzung dafür ist natürlich, dass es der Graph zusammenhängend ist, es also einen Weg von jedem Knoten zu jedem anderen Knoten gibt)
Der ausgewählte Knoten wird dann im Mittelpunkt dargestellt, während die der generierte Baum schichtweise um ihn auf Kreisen dargestellt wird. Somit ist sofort ersichtlich, wieweit ein beliebiger Knoten des Netzwerks vom ausgewählten Knoten entfernt ist (man braucht nur nachschauen, auf welcher Schicht er liegt = entspricht dem kürzesten Pfad)

Ringgraph
Abbildung 1: Knoten im Zentrum

Animierte Übergänge

Natürlich ist es nun auch möglich, einen anderen Knoten auszuwählen. Da man bei einer sprunghaften Änderung (der neue Knoten kommt ins Zentrum, ein Baum wird rund um ihn aufgebaut) die Übersicht verlieren würde, werden die Positionsänderungen animiert.
Wie man sich anhand der untenstehenden Graphiken leicht überzeugen kann, würde es bei direkten Positions-Interpolation zu vielen Überkreuzungen kommen. Deshalb werden die Polarkoordinaten der Knoten berechnet und diese dann interpoliert.

Interpolation der Position
Abbildung 2: Interpolation der Kartesischen Koordinaten vs Interpolation von Polarkoordinaten

Verzögerung der Animation

Versuche zeigen, dass es für den Menschen einfacher ist, den Überblick zu behalten, wenn die Animation nicht in konstantem Tempo vollzogen wird, sondern es anfangs eine Beschleunigungsphase und am Ende eine Abbremsphase gibt. Dies kann mit Hilfe von trigonometrischen Funktionen realisiert werden.

Verzögerte Bewegung
Abbildung 3: Verzögerte Bewegung mittels Tangens

Platzallokation

Wie man sich gut vorstellen kann, ist es vorteilhaft, ein radiale Anordnung zu verwenden, da in höheren Schichten der Umfang größer ist und somit auch mehr Knoten Platz finden - das ist deshalb gut, da der Baum ja immer breiter wird.
Den Platz den ein Knoten benötigt hängt von mehreren Kriterien ab:

Platzallokation
Abbildung 4: Platzallokation eines Knotens

Das Programm

Datenimport

Ich verwende für das Programm eine allgemeine Import-Schnittstelle, so dass es möglich ist, den Graph aus verschiedenen Quellen (XML, Datenbank, Textdatei, ...) zu lesen. Für meine Anwendung habe ich dann auch einen XML-Importer für ein sehr einfaches XML-Document, welches den Graphen speichert, geschrieben.

Implementation

Das Programm wurde C# als Window-Anwendung entwickelt. Es folgt eine kurze Beschreibung der Source-Files.

Node.cs

Aufbau eines allgemeine Graphens

  • Verlinken von Knoten
  • Breitensuche im Graph
  • Suchen der kürzesten Verbindung zwischen zwei Knoten
  • Ermittelt ob Graph zyklisch ist

NodeTree.cs

Erstellt Baum ausgehend von einem Knoten

  • Baum erstellen
  • Suche von Kinder-Knoten im Baum
  • Tiefe des Baums bestimmen

NodeGraph.cs

Graphische Darstellung eines Knotens

  • Platzallokation eines Knoten
  • Positionsberechnung eines Knotens
  • Animation
  • Mausklick => Knoten ermitteln

GraphController.cs

Steuerung des Graphen

  • Animationstiming (+ Verzögerung)
  • Redraw-Routine des Graphen
  • Mausklick verarbeiten

NodeImporter.cs

Allgemeine Schnittstelle zum Datenimport

NodeImporterXml.cs

Importer für einfaches XML-Format

Screenshots

Screnshot 1
Abbildung 5: Screenshot 1


Screnshot 2
Abbildung 6: Screenshot 2


Screnshot 3
Abbildung 7: Screenshot 3

Referenzen