Zeichnen mit PHP

Seite 1 von 1 - Forum: Coding Stuff auf overclockers.at

URL: https://www.overclockers.at/coding-stuff/zeichnen_mit_php_64150/page_1 - zur Vollversion wechseln!


grOOvekill@ schrieb am 23.01.2003 um 11:19

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 schrieb am 23.01.2003 um 14:55

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


atrox schrieb am 23.01.2003 um 15:01

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 schrieb am 23.01.2003 um 17:44

Zitat von grOOvekill@
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 schrieb am 23.01.2003 um 18:13

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@ schrieb am 24.01.2003 um 09:02

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 schrieb am 24.01.2003 um 18:30

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


grOOvekill@ schrieb am 27.01.2003 um 11:00

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?


watchout schrieb am 27.01.2003 um 12:15

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?
theoretisch dürfte sowas kein problem darstellen, wenn ich mal kapieren würde, wie du von der matrix auf den graphen kommst... :rolleyes:


grOOvekill@ schrieb am 27.01.2003 um 12:30

Zitat von watchout
theoretisch dürfte sowas kein problem darstellen, wenn ich mal kapieren würde, wie du von der matrix auf den graphen kommst... :rolleyes:

Okay, ein wenig Erklärung sollte ich wohl geben. Sorry, hab vergessen, daß sich nicht jeder mit dem Schei** auskennt! :D

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 schrieb am 27.01.2003 um 12:53

Zitat von grOOvekill@
Okay, ein wenig Erklärung sollte ich wohl geben. Sorry, hab vergessen, daß sich nicht jeder mit dem Schei** auskennt! :D

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?
:)
oh... muss ehrlich sagen, dass ich von sowas noch nie was gehört habe :D

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:

Code: PHP
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 schrieb am 27.01.2003 um 13:29

man muß natürlich nur die hälte der matrix speichern bzw auswerten, da sie an der diagonale gespiegelt ist.


watchout schrieb am 27.01.2003 um 13:59

Zitat von atrox
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 ;)




overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2025