grOOvekill@
LegendVienna Badass
|
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!
|
atrox
in fairy dust... I trust!
|
|
atrox
in fairy dust... I trust!
|
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.
|
crashman
OC Addicted
|
Im Prinzip geht es um ein paar Knoten, die mit einer Kante (Strich) verbunden sind. Vielleicht mißversteh ich dic aber ich glaub diese art von graphen "automatisch" zeichnen zu lassen ist keine triviale aufgabe. Vorallem wenn es nachher noch ein mensch lesen können soll. Das Problem ist das du nur mit geraden linien net weit kommen wirst. Mit Kurven wirds aber recht mühsam. Sollen sie die kanten auch noch net überschneiden wirds sicher lustig. Ist meine meinung vielleicht irr ich mich und es gibt perfekt libarys die dir solche graphen zeichnen aber selbergemacht ist es sicher eine tolle leistung.
|
atrox
in fairy dust... I trust!
|
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.
|
grOOvekill@
LegendVienna Badass
|
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.
|
watchout
Legendundead
|
hmm, ich weiss nich genau, was du willst - ich hab mal sowas gemacht: http://www.renn-weg.net/watchouts_scripts/graph.phpps: 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
Bearbeitet von watchout am 24.01.2003, 18:34
|
grOOvekill@
LegendVienna Badass
|
|
watchout
Legendundead
|
|
grOOvekill@
LegendVienna Badass
|
theoretisch dürfte sowas kein problem darstellen, wenn ich mal kapieren würde, wie du von der matrix auf den graphen kommst... ![:rolleyes:](/images/smilies/rolleyes.gif) Okay, ein wenig Erklärung sollte ich wohl geben. Sorry, hab vergessen, daß sich nicht jeder mit dem Schei** auskennt! ![:D](/images/smilies/biggrin.gif) 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?
|
watchout
Legendundead
|
Okay, ein wenig Erklärung sollte ich wohl geben. Sorry, hab vergessen, daß sich nicht jeder mit dem Schei** auskennt! ![:D](/images/smilies/biggrin.gif)
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?
![:)](/images/smilies/smile.gif) oh... muss ehrlich sagen, dass ich von sowas noch nie was gehört habe ![:D](/images/smilies/biggrin.gif) also: - deine erste aufgabe wird sein müssen, die koordinaten für die einzelnen punkte zu berechnen - die legst du idealerweise in einem array ab (ich nenns mal $koordinaten_array) - ok, weiter: da es ja egal sein dürfte, ob du die matrix spalten- oder zeilenweise abarbeitest, machst du am besten eine foreach-schleife (den key wirst du brauchen: $key_a), und darin gleich noch eine ($key_b) ach, was red' ich... so sollt' der teil ca. gehn: foreach($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
);
}
}
}
hth
|
atrox
in fairy dust... I trust!
|
man muß natürlich nur die hälte der matrix speichern bzw auswerten, da sie an der diagonale gespiegelt ist.
|
watchout
Legendundead
|
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 lohnt
|