Graphenprogramm
-
Graphiker schrieb:
Das Zeichnen eines Graphes dagegen ist eine äußerst komplexe Angelegenheit, da würde ich dir zu einem fertigen Framework raten, denn das ist ein Forschungsgebiet für sich (und die Algorithmen zum Zeichnen sind weitaus komplexer als Dijkstra).
Man zeichnet selber die Punkte und Pfeile mit der Maus ein, da ergibt sich das Problem nicht.
-
volkard schrieb:
Graphiker schrieb:
Das Zeichnen eines Graphes dagegen ist eine äußerst komplexe Angelegenheit, da würde ich dir zu einem fertigen Framework raten, denn das ist ein Forschungsgebiet für sich (und die Algorithmen zum Zeichnen sind weitaus komplexer als Dijkstra).
Man zeichnet selber die Punkte und Pfeile mit der Maus ein, da ergibt sich das Problem nicht.
Man könnte die Anzahl der Knoten auch einfach auf die nächste Quadratzahl n aufrunden, dann die Zeichenfläche in sqrt(n) x sqrt(n) Plätze unterteilen und in jeden einen Knoten malen. Anschließend die Kanten einfach als Linien von Platz (x,y) nach (x',y') zeichnen
-
***
-
Lustiger Kerl schrieb:
Man könnte die Anzahl der Knoten auch einfach auf die nächste Quadratzahl n aufrunden, dann die Zeichenfläche in sqrt(n) x sqrt(n) Plätze unterteilen und in jeden einen Knoten malen. Anschließend die Kanten einfach als Linien von Platz (x,y) nach (x',y') zeichnen
Versuchen wir mal, daß die Kanten sich nicht kreuzen, was natürlich nicht immer geht.
Versuchen wir's mal als Mensch bei
http://www.flashgames.de/index.php?onlinespiele=8836&todo=play
und überlegen uns, wie man das als Programm machen würde.
-
Schau dir mal das hier an:
http://farm3.static.flickr.com/2607/3864349687_d717f9fb2b_o.gif
hab das gerade zwecks meiner Diplomarbeit in C# geschrieben.
Sogar Breitensuche hätte ich schon eingebaut.
Dijkstra wäre ne Arbeit von 15min, plus etwas Zeit für die Visualisierung.
Könnte dir ja Codeausschnitte zukommen lassen,wennst möchtest.Lg THE_ONE
-
THE_ONE schrieb:
Schau dir mal das hier an:
http://farm3.static.flickr.com/2607/3864349687_d717f9fb2b_o.gif
hab das gerade zwecks meiner Diplomarbeit in C# geschrieben.
Sogar Breitensuche hätte ich schon eingebaut.
Dijkstra wäre ne Arbeit von 15min, plus etwas Zeit für die Visualisierung.
Könnte dir ja Codeausschnitte zukommen lassen,wennst möchtest.Lg THE_ONE
Hallo THE_ONE
das wär für mich natürlich sehr hilfreich, schon alleine wegen der graphischen Implementierung.
eigentlich würde ich mir vorstellen, dass man "Knoten einfügen" auswählt, dann auf dem Fenster "herumklicken" kann und dann auf "Kanten einfügen" klickt und dann auf den Startknoten drückt und dann auf den Endknoten...
die Länge der Kanten müsste ja über die Mausposition einfach zu berechnen sein, dass heisst eigentlich muss ich es erstmal nur schaffen, im laufenden Prozess Bildchen und Linien zu zeichnen und die Maus zu "überwachen". Irgendwie hab ich das Gefühl, das müsste doch "relativ" einfach zu realisieren sein, aber ich komm irgendwie trotz 3 Tutorials nicht drauf, wie ich das machen muss(hab mich mal mit dem MFC versucht)
CPaintDC dc(this); dc rectangle(x1, y1, x2, y2);
funktioniert ja nur bei CChildView::OnPaint() und das wiederum wird nur beim Fenster zeichnen oder neuzeichnen ausgeführt.
Wie kann ich in das Fenster zeichnen während das Fenster schon gezeichnet wurde?
lg renzo
-
nman schrieb:
Ich würde das Tool einfach in ein Konsolenutility und evtl. ein GUI dafür aufteilen und Graphviz oä verwenden: http://graphviz.org/
Sorry, aber graphviz ist von der Zeichenqualität für alles was größer ist als 10 Knoten sowas von unter aller Kanone. Das ist kein Ersatz für ein vernünftiges Framework wie JUNG, yFiles oder notfalls wenigstens die Hand voll Zeichen-Algorithmen in boost.
-
volkard schrieb:
Lustiger Kerl schrieb:
Man könnte die Anzahl der Knoten auch einfach auf die nächste Quadratzahl n aufrunden, dann die Zeichenfläche in sqrt(n) x sqrt(n) Plätze unterteilen und in jeden einen Knoten malen. Anschließend die Kanten einfach als Linien von Platz (x,y) nach (x',y') zeichnen
Versuchen wir mal, daß die Kanten sich nicht kreuzen, was natürlich nicht immer geht.
Versuchen wir's mal als Mensch bei
http://www.flashgames.de/index.php?onlinespiele=8836&todo=play
und überlegen uns, wie man das als Programm machen würde.Obs kreuzungsfrei geht kann man leicht rausbekommen. Allerdings ist es NP-schwer möglichst wenige Knoten zu bewegen: http://arxiv.org/abs/0709.0170v5
-
Jester schrieb:
Sorry, aber graphviz ist von der Zeichenqualität für alles was größer ist als 10 Knoten sowas von unter aller Kanone. Das ist kein Ersatz für ein vernünftiges Framework wie JUNG, yFiles oder notfalls wenigstens die Hand voll Zeichen-Algorithmen in boost.
Kein Grund, sich zu entschuldigen.
Ist mir bis jetzt noch nicht aufgefallen, weil ich (a) Graphviz typischerweise für kleinere Sachen (Mehr als 10 Knoten, aber offensichtlich nicht "genug".) verwendet habe und (b) keinen direkten Vergleich zu JUNG oä. habe.Hast Du einen Vergleich parat?
-
ich lass jetzt das Fenster einfach "updaten" also neuzeichnen, funktioniert eigentlich sehr gut, aber ist das ressourcentechnisch vertretbar?