BlackBoard » Design, Programmierung & Entwicklung » Programmieren » Layoutalgorithmen » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Neues Thema erstellen Antwort erstellen
Zum Ende der Seite springen Layoutalgorithmen
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
phlox81 phlox81 ist männlich
Bote des Lichts und Moderator


images/avatars/avatar-2264.jpg

Dabei seit: 19.10.2002
Beiträge: 3.028
Herkunft: Irgendwo im Nirgendwo

Layoutalgorithmen       Zum Anfang der Seite springen

Hallo,

beschäftige mich gerade mit Layoutalgorithmen, für z.b. Graphen.
Hat jemand mit diesem Thema Erfahrung? Es geht quasi um das Anordnen von Fenstern.

Ich habe verschiedene Rechecke, welche wiederum zu anderen Rechtecken Verbindungen halten können (aber nicht müssen).

Am Anfang sind diese Verbindungen hierarchisch, d.h. aus einzelnen Rechtecken ließe sich ein Baum formen z.B.(A -> B , B -> C, B -> D, A -> E).
Wobei jedes Recheckt seine Verbindungen kennt. In beide Hierarchierichtungen.

Ich habe eine Liste, in der alle Rechtecke liegen, und kann ebenfalls für jedes Rechteck mir die Verbindungen zu anderen Rechtecken holen.
Ich will nun diese Rechecke am geschicktesten in einem Fenster anordnen.

Und dafür suche ich nach Ideen, wie man das am geschicktesten macht, ohne das all zu viel freiraum bleibt, und sich möglichst wenige Verbindungen überkreuzen.

Meine bisherige Idee:
code:
1:
2:
3:
4:
5:
liste rechtecke = GetShapeList(), rechtecke_ohne_verbindungen = filter(no_conncections,rechtecke);
liste rechtecke_mit_kindern = filter(haschildren,rechtecke);
liste rechtecke_mit_eltern_und_kindern = filter(combine(haschildren, hasparent),rechtecke);


Problem ist hierbei jedoch die Hierarchie, die ich auch als top down darstellen will.
Ich müsste mir also irgendwie einen Layout graphen basteln, muss jedoch dann beachten, das ich möglichst sinnvoll entstehende Zwischenräume fülle.

Hat jemand eine Idee, wie ich am geschicktesten dieses Problem lösen kann?

phlox

__________________
Intelligenz ist eine Illusion des Menschen

phlox81.de | codenode.de
17.05.2008 12:53 phlox81 ist offline E-Mail an phlox81 senden Homepage von phlox81 Beiträge von phlox81 suchen
Xcryon
Neuling

Dabei seit: 31.03.2008
Beiträge: 4

      Zum Anfang der Seite springen

Hi,

ich vermute ich habe nicht richtig verstanden was genau du machen willst.

Du hast einen Graphen (Mit einem Root-Element?), wobei jeder Knotenpunkt ein Rechteck representiert. Diese Rechtecke möchtest du nun (möglichst kompakt) graphisch darstellen, so das die Herachie der Rechtecke erhalten bleibt. Außerdem sollen die Verbindungen zwischen den Rechtecken dargestellt werden!?
17.05.2008 21:19 Xcryon ist offline E-Mail an Xcryon senden Beiträge von Xcryon suchen
phlox81 phlox81 ist männlich
Bote des Lichts und Moderator


images/avatars/avatar-2264.jpg

Dabei seit: 19.10.2002
Beiträge: 3.028
Herkunft: Irgendwo im Nirgendwo

Themenstarter Thema begonnen von phlox81
      Zum Anfang der Seite springen

Zitat:
Original von Xcryon
Hi,

ich vermute ich habe nicht richtig verstanden was genau du machen willst.

Du hast einen Graphen (Mit einem Root-Element?), wobei jeder Knotenpunkt ein Rechteck representiert. Diese Rechtecke möchtest du nun (möglichst kompakt) graphisch darstellen, so das die Herachie der Rechtecke erhalten bleibt. Außerdem sollen die Verbindungen zwischen den Rechtecken dargestellt werden!?


Es gibt kein Rootelement. Mit Root wäre es ja einfach, einfach jede Ebene in die Breite ziehen.

Ansonsten hast du korrekt verstanden, in meiner Datenstruktur habe ich eine Art graph, dessen Knoten durch Rechtecke dargestellt werden sollen.
Die Verbindungen dazwischen sind dann die Kanten.

Wo bei es 4 Verschiedene Knoten gibt:

- Knoten ohne Kante(n).
- Knoten mit Kante(n) nach oben und unten
- Knoten mit Kante(n) nach oben
- Knoten mit Kante(n) nach unten

Die Kanten haben also jeweils eine Richtung.

Das Ganze will ich möglichst effektiv und gut darstellen.

phlox

__________________
Intelligenz ist eine Illusion des Menschen

phlox81.de | codenode.de
17.05.2008 21:27 phlox81 ist offline E-Mail an phlox81 senden Homepage von phlox81 Beiträge von phlox81 suchen
Xcryon
Neuling

Dabei seit: 31.03.2008
Beiträge: 4

      Zum Anfang der Seite springen

Zitat:

Wo bei es 4 Verschiedene Knoten gibt:

- Knoten ohne Kante(n).
- Knoten mit Kante(n) nach oben und unten
- Knoten mit Kante(n) nach oben
- Knoten mit Kante(n) nach unten


Knoten ohne Kanten würde bedeuten das es Knotengibt die garnicht zu dem Graphen gehören!?

Die anderen 3 Punkte sind Optional, sprich es könnte auch sein das der Graph wie folgt aussieht!?:

[A->B, B->C, C->A]

Wie will man solche ungerichteten Graphen darstellen? Ich könnte mir nur vorstellen das man mit irgend einem Element beginnt und dieses als (Pseudo)Root-Element deklariert. Dann kann man die restlichen Knoten wie einen gerichteten Graphen aufbauen. Stößt man auf einen Knoten welcher auf das (Pseudo)Root-Element verweist muss man halt eine Kant zurück zeichnen.

Ich denke aber das solche Graphen ab einem gewissen Verzwigungsgrad nicht mehr vernünftig visuallisiert werden können.

Wie ist denn die konkrete Aufgabenstellung wenn man fragen darf?

[Edit]
Achso, du meinst wahrscehinlich keine Ebenen-Darstellung, sondern eher sowas:

+++ Bild konnte nicht geladen werden +++

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Xcryon: 17.05.2008 22:06.

17.05.2008 21:48 Xcryon ist offline E-Mail an Xcryon senden Beiträge von Xcryon suchen
phlox81 phlox81 ist männlich
Bote des Lichts und Moderator


images/avatars/avatar-2264.jpg

Dabei seit: 19.10.2002
Beiträge: 3.028
Herkunft: Irgendwo im Nirgendwo

Themenstarter Thema begonnen von phlox81
      Zum Anfang der Seite springen

Zitat:
Original von Xcryon
Zitat:

Wo bei es 4 Verschiedene Knoten gibt:

- Knoten ohne Kante(n).
- Knoten mit Kante(n) nach oben und unten
- Knoten mit Kante(n) nach oben
- Knoten mit Kante(n) nach unten


Knoten ohne Kanten würde bedeuten das es Knotengibt die garnicht zu dem Graphen gehören!?

Die anderen 3 Punkte sind Optional, sprich es könnte auch sein das der Graph wie folgt aussieht!?:

[A->B, B->C, C->A]

Wie will man solche ungerichteten Graphen darstellen? Ich könnte mir nur vorstellen das man mit irgend einem Element beginnt und dieses als (Pseudo)Root-Element deklariert. Dann kann man die restlichen Knoten wie einen gerichteten Graphen aufbauen. Stößt man auf einen Knoten welcher auf das (Pseudo)Root-Element verweist muss man halt eine Kant zurück zeichnen.

Ich denke aber das solche Graphen ab einem gewissen Verzwigungsgrad nicht mehr vernünftig visuallisiert werden können.

Wie ist denn die konkrete Aufgabenstellung wenn man fragen darf?


Nein, Ringe und ähnliche spielerreien gibt es nicht.

Eigentlich ist es momentan eher eine Ansammlung von Bäumen, könnte man sagen.
A-F
A -> B, A-> C, B-> D, E -> F z.b.

Ich hänge mal einen Screenshot an. Ich habe jetzt erstmal nach den 4 Sorten gefiltert, und sie dann jeweils in eine Ebene geschmissen. Was sicher nicht optimal ist Augenzwinkern

Vielleicht sollte ich die Bäume mit Kindern trennen, und jeweils auf ihre Roots die Freien Objekte aufteilen.

phlox

Dateianhang:
png UML0.1.png (16 KB, 44 mal heruntergeladen)


__________________
Intelligenz ist eine Illusion des Menschen

phlox81.de | codenode.de
17.05.2008 22:11 phlox81 ist offline E-Mail an phlox81 senden Homepage von phlox81 Beiträge von phlox81 suchen
phlox81 phlox81 ist männlich
Bote des Lichts und Moderator


images/avatars/avatar-2264.jpg

Dabei seit: 19.10.2002
Beiträge: 3.028
Herkunft: Irgendwo im Nirgendwo

Themenstarter Thema begonnen von phlox81
      Zum Anfang der Seite springen

So, jetzt bin ich etwas weiter, zumindest in der Theorie.

code:
1:
A - J


Ich teile zu erst die Liste der Knoten in Knoten die nur Eltern sind (Rootelement damit),
und die restlichen Auf.

code:
1:
2:
parent (A,B)
C-J


Jetzt verteile ich die Elemente auf die Rootknoten, so das ein Baum ensteht.

code:
1:
2:
parent (A -> (C, D -> E),B->(F -> H))
G-J


Nun habe ich 2 Bäume (ACDE,BFH), und 3 "Freie" Knoten.
Wenn ich nun den Tiefsten Baum ermittle, weiss ich schon mal wieviele "Etagen" ich in meinem Diagramm abbilden muss (mindestens).
Und in diesen Etagen kann ich nun nach Platz für freie Elemente oder andere Bäume suchen.

Ergebnis könnte dann sein:
code:
1:
2:
3:
4:
 A B I
C D F
 E H G
J


__________________
Intelligenz ist eine Illusion des Menschen

phlox81.de | codenode.de
18.05.2008 14:57 phlox81 ist offline E-Mail an phlox81 senden Homepage von phlox81 Beiträge von phlox81 suchen
Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Antwort erstellen
BlackBoard » Design, Programmierung & Entwicklung » Programmieren » Layoutalgorithmen

Forensoftware: Burning Board 2.3.6, entwickelt von WoltLab GmbH