Frage

Ich schreibe Java-Programm für Liga Sportarten, die durch aktuellen Satz von gespielten Spielen der einzelnen Teams und ihren Zeitplan der nächsten Spiele gehen, und dann basierend auf, dass ich ein Modell des Flussnetzwerkes zu machen. Die Idee des Programms ist es, herauszufinden, welche Teams sind bereits ausgeschieden und haben keine Chancen wining oder teilen 1 Platz mit einem anderen Team. Nach Netzwerk Analyse (unter Anwendung EdmondsKarp algo.) Finde ich heraus, ob Teams get eliminiert oder nicht. Jetzt möchte ich auch dies simulieren. Ich verwende JGraphT als Grafik-Bibliothek und wird wahrscheinlich JGraph für die Visualisierung werden (Grund: wenn ich JGraphT Objekte erstellen kann ich einfach JGraph Objekte mit ihnen sowie eine Grafik instanziiert). Ich fand auch gestern für Jung Rahmen aus, scheint schön.

Das Hauptproblem ist, ich schreibe nie Simulation und es ist der Punkt, wo ich „Hallo Welt“ Hilfe benötigen. Als ich Simulation sage, meine ich, ich möchte visuell jeden Teil die Ausführung des Algorithmus zeigen, und hier ist Beispielszenario: Algorithmus Vermehrung Wege finden hat, so möchte ich zeigen, wenn jede neue Kante zu Kantenzug hinzugefügt wird. Benutzer werden in der Lage und Animation zu stoppen zu spielen. Ich möchte auch in allen Kanten und ähnlichen Änderungen der Strömungs zeigen. Bisher habe ich Algorithmus arbeiten, aber ich weiß nicht, wie Simulation zu nähern. Soll ich mit separatem Thread für die Simulation der Ausführung sein? Soll ich eigene Klasse schreiben, die als Algorithmus ausgeführt werden würden, aber mit den Staaten der Aufnahme, ohne auch nur für echten Algorithmus zu wissen (denn ich will nicht die Leistung des realen Algorithmus zu unterbrechen). Soll ich aktuellen Algorithmus verwenden und einige Zeilen in zwischen zum Speichern von Ausführungszuständen in einigen Datenstrukturen hinzufügen, die ich später zur Anzeige Simulation Benutzer verwenden könnte? Irgendwelche Ideen helfen könnte ..

War es hilfreich?

Lösung

Wenn ich Dich richtig verstehe, Sie fragt nach einem Weg zu belebt Ihrem Algorithmus und steuert seine Ausführung interaktiv innerhalb der Animation, die nicht ganz die gleichen wie Simulation ist (eine Simulation nur führt ein Modell, in der Regel über einen bestimmten Zeitraum -., die nichts mit Benutzer-Interaktion oder eine Animation zu tun hat, aber natürlich mit könnte kombiniert sowohl als auch)

Ich würde vorschlagen, dass Sie das Problem in die zwei Hauptteile, Interaktion und Animation aufgeteilt. Model-View-Controller Ansatz gelöst werden p>

  • mit Ihrem Algorithmus zu interagieren, identifizieren, die ‚atomaren Stufen‘ Sie unterscheiden wollen, z.B. die Zugabe von einem Rand zu einem Pfad. Dann sind Sie entweder erweitern Algorithmus auch schrittweise arbeiten oder eine zusätzliche Klasse zu schreiben, das den Algorithmus wickelt und stellt die notwendigen Routinen zur schrittweisen Ausführung.

  • den aktuellen Zustand Sie Algorithmus animieren in ist, sollten Sie die Beobachter verwenden , wo Sie Ihre Animation Komponente ist der Beobachter und wird durch den Algorithmus benachrichtigt, wenn sein Zustand geändert wird, zB eine Kante wurde in einen Pfad eingefügt. Sie könnten auch die tatsächliche Zustandsänderung beschreiben ein Hinweis (wie der Rand-Objekt, das auf dem Pfad hinzugefügt wurde), indem; dies könnte es einfacher macht den Unterschied zwischen altem und neuen Zustand sichtbar zu machen.

In Bezug auf Fragen Einfädeln: der Algorithmus wahrscheinlich in einem extra Thread ausgeführt werden soll (es sei denn, es ist sehr sehr schnell ist), und man konnte auch die Animation in einem extra Thread setzen (dies wahrscheinlich bereits von JGraph bereitgestellt sowieso, überprüfen nur die Dokumentation oder nutzen ihre Komponenten wie empfohlen). Sie sollten jedoch beachten, dass die Laufzeitleistung Ihres Algorithmus mit ziemlicher Sicherheit von der aninmation betroffen ist, auch wenn es ist in einem anderen Thread ausgeführt wird (da die Notifizierungen hat sich noch durch den Algorithmus durchgeführt werden) - also Vorsicht mit Performance-Analyse und die Verwendung einer nicht-animierte Version für solche Studien.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top