URL: https://www.overclockers.at/coding-stuff/zeichnen_mit_php_64150/page_1 - zur Vollversion wechseln!
Ich hätt da mal eine Frage:
Hab ein Schulprojekt laufen, in dem es um Graphentheorie geht. Ist auch schon fertig, funktioniert bestens. Hab's mittels PHP realisiert. Nun habe ich mich gefragt, ob man Graphen nicht auch zeichnen kann. Nachdem PHP ja über diverse Mittel zur Grafikerstellung verfügt, sollte das doch technisch kein Problem sein. Nachdem ich die Matrix-Informationen in mehrdimensionalen Arrays zur Verfügung habe, bräuchte ich das doch nur mehr irgendwie in eine Grafik umwandeln.
Und hier ist mein Problem: Ich habe keine Ahnung, wie schwierig und aufwendig das sein könnte, eine Matrix grafisch darzustellen. Im Prinzip geht es um ein paar Knoten, die mit einer Kante (Strich) verbunden sind. Also nix aufregendes.
Hat irgendwer schon einmal so etwas in der Art programmiert und könnte mir Tipps geben, wie ich das angehen soll? Irgendwelche Tut-Sites würden mir da auch schon weiterhelfen.
Oder soll ich komplett den Hut draufhauen und mir den Streß gar nicht antun? Eine grafische Implementierung der Graphen wurde nämlich gar nicht verlangt, wäre sozusagen ein Bonus von mir.
Bin dankbar für jeden brauchbaren Tipp!
http://www.phpbuilder.com/columns/allan20000830.php3
http://php.weblogs.com/GD
http://www.hotscripts.com/PHP/Tips_...tion/more2.html
http://www.php.net/manual/en/ref.image.php
du wirst ein zweites script schreiben müssen, und ihm irgendwie all deine daten übergeben (form, get, database, ...) müssen, da du das bild über ein normales <IMG SRC="otherscript.php?...."> einbinden mußt.
Zitat von grOOvekill@Im Prinzip geht es um ein paar Knoten, die mit einer Kante (Strich) verbunden sind.
du hast recht, für einen allgemeinen graph ist die aufgabe nicht trivial, wenn man zb so constrains wie maximale abstände, geringste wegstrecken, verteilung , lesbarkeit mit hinein nimmt.
wenn er wirklich nur "eine handvoll" hat, wird es wohl reichen, wenn er sie auf einem kreis anordnet.
Also die maximale Anzahl der Knoten beträgt 15. Wobei eigentlich eh nur zwischen 5 und 10 Knoten eingegeben werden. Ich hatte auf jeden Fall vor, sie kreisförmig anzuordnen und dann einfach mit Kanten zu verbinden, sofern es eine Verbindung gibt. Überschneidung ist egal.
Mal sehen, ob die Links da oben was bringen.
hmm, ich weiss nich genau, was du willst - ich hab mal sowas gemacht:
http://www.renn-weg.net/watchouts_scripts/graph.php
ps: is ne x³-funktion graphisch dargestellt...
das script fängt mit folgenden get-argumenten was an:
Xmin
Xmax
Ymin
Ymax
width
height
step
wobei step sich auf die pixel bezieht also nicht kleiner als 1 sein kann
Okay. Also das hier wird nach der Eingabe der Knotenanzahl angezeigt:
http://www.braintenance.com/kemal/pics/matrix.jpg
und obenstehende Matrix stellt folgenden Graphen dar:
http://www.braintenance.com/kemal/pics/graph.jpg
Was ich eigentlich vorhabe ist, daß untenstehender Graph quasi mittels PHP gezeichnet wird. Ein paar Knoten die verbunden sind.
Kompliziert?
theoretisch dürfte sowas kein problem darstellen, wenn ich mal kapieren würde, wie du von der matrix auf den graphen kommst...Zitat von grOOvekill@Okay. Also das hier wird nach der Eingabe der Knotenanzahl angezeigt:
http://www.braintenance.com/kemal/pics/matrix.jpg
und obenstehende Matrix stellt folgenden Graphen dar:
http://www.braintenance.com/kemal/pics/graph.jpg
Was ich eigentlich vorhabe ist, daß untenstehender Graph quasi mittels PHP gezeichnet wird. Ein paar Knoten die verbunden sind.
Kompliziert?
Zitat von watchouttheoretisch dürfte sowas kein problem darstellen, wenn ich mal kapieren würde, wie du von der matrix auf den graphen kommst...
oh... muss ehrlich sagen, dass ich von sowas noch nie was gehört habeZitat von grOOvekill@Okay, ein wenig Erklärung sollte ich wohl geben. Sorry, hab vergessen, daß sich nicht jeder mit dem Schei** auskennt!
Here goes:
Der Graph besteht aus 6 Knoten, von 1 bis 6 nummeriert. Wenn du dir die matrix ansiehst, wirst du merken, daß auch hier 6 Felder existieren. Okay, beginnen wir bei der ersten Zeile, neben dem 1'er. Da steht:
000101 und darüber steht 123456. Das ergibt untereinander:
123456
000101
Das bedeutet, daß es von Knoten 1 eine Verbindung zu Knoten 4 und Knoten 6 gibt.
In der 2. Zeile steht 001010 --> Von Knoten 2 geht eine Verbindung zu Knoten 3 und eine zu Knoten 5
usw.usw...
Alles klar?
Code: PHPforeach($eingabe_matrix as $key_a => $eingabe_zeile) { foreach($eingabe_zeile as $key_b => $eingabe_zelle) { if(isset($eingabe_zelle)) { imageline( $imagepointer, $koordinaten_array[$key_a]['x'], $koordinaten_array[$key_a]['y'], $koordinaten_array[$key_b]['x'], $koordinaten_array[$key_b]['y'], $color ); } } }
man muß natürlich nur die hälte der matrix speichern bzw auswerten, da sie an der diagonale gespiegelt ist.
klar, es geht, fragt sich nur ob sich der aufwand lohntZitat von atroxman muß natürlich nur die hälte der matrix speichern bzw auswerten, da sie an der diagonale gespiegelt ist.
overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2025