HILFE! - Ein mathematisches Problem (Grafiken erzeugen)
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
achse
angenommen code
code
computer
dreisatz
drittletzten zeile
eingegebenen zahlen
endpunkt
frage
linie
position
problem
prozent
punkt
rand
schnelle hilfe
schriftart
spalten
werte array
zeile
-
Also, mein Problem:
Der Computer rechnet von zehn eingegebenen Zahlen die Prozente von einem zum nächsten Wert aus.
Diese Prozent-Werte sollen in einer erzeugten Grafik gespeichert werden.
Hier erst mal der Quelltext:
$im = imagecreate(600, 400); $grau = imagecolorallocate($im, 192, 192, 192); $s = imagecolorallocate($im, 0, 0, 0); $b = imagecolorallocate($im, 0, 0, 255); $schriftart = "arial.ttf"; imagefill($im, 0, 0, $grau); for ($i=0; $i<6; $i++) { imageline($im, 30, 30 + $i * 340/5, 570, 30 + $i * 340/5, $s); imagettftext($im, 11, 0, 575, 30 + $i * 340/5, $s, $schriftart, 500-$i*100); } for ($i=0; $i<10; $i++) { imageline($im, 30 + $i * 540/9, 30, 30 + $i * 540/9, 370, $s); imagettftext($im, 11, 0, 20 + $i * 540/9, 385, $s, $schriftart, 1 + $i); } imageline($im, 30, ((340/5) * 4) + 30, (540/9) + 30, ???, $b); imagejpeg($im, $name . "_auswertung.jpg"); imagedestroy($im);
Mein Problem ist hier in der drittletzten Zeile (s. ???):
imageline($im, 30, ((340/5) * 4) + 30, (540/9) + 30, ???, $b);
Mit dieser Zeile soll er eine Gerade vom ersten Wert (also immer 100%) zum 2. Wert (Variable $prozent_zwei) erstellen.
Angenommen
, dann würde die Zeile ja so heißen:$prozent_zwei = 200
imageline($im, 30, ((340/5) * 4) + 30, (540/9) + 30, ((340/5) * 3) + 30, $b);
Also nochmal die Frage:
Wie kriege ich das mit
hin?$prozent_zwei
Danke für eure schnelle Hilfe!
PS: wenn ihr was nicht versteht, bitte schnell fragen. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
So funktioniert das:
$werte = array(100,200,500,80,150,400,350,300,225,100); $breite = 600; $hoehe = 400; $rand = 30; $zeilen = 5; $spalten = 9; $im = imagecreate($breite, $hoehe); $grau = imagecolorallocate($im, 192, 192, 192); $s = imagecolorallocate($im, 0, 0, 0); $b = imagecolorallocate($im, 0, 0, 255); $schriftart = "arial.ttf"; imagefill($im, 0, 0, $grau); $ty = ($hoehe - 2 * $rand)/$zeilen; $tx = ($breite - 2 * $rand)/$spalten; for ($i=0; $i<=$zeilen; $i++) { imageline($im, $rand, $rand + $i * $ty, $breite - $rand, $rand + $i * $ty, $s); imagettftext($im, 11, 0, $breite - 25, $rand + $i * $ty, $s, $schriftart, 500-$i*100); } for ($i=0; $i<=$spalten; $i++) { imageline($im, $rand + $i * $tx, $rand, $rand + $i * $tx, $hoehe - $rand, $s); imagettftext($im, 11, 0, $rand - 10 + $i * $tx, $hoehe - 15, $s, $schriftart, 1 + $i); } for($i=0;$i<$spalten;$i++) { //imageline($im, 30, ((340/5) * 4) + 30, (540/9) + 30, ((340/5) * 3) + 30, $b); $sx = $rand + $i * $tx; // Position auf der X-Achse für Wert i $sy = $hoehe - $rand; // 0-Punkt auf der Y-Achse $sy -= $werte[$i] * $ty / 100; // Dreisatz für Wert i $ex = $sx + $tx; // Position auf der X-Achse für Wert i+1 $ey = $hoehe - $rand; // 0-Punkt auf der Y-Achse $ey -= $werte[$i + 1] * $ty / 100; // Dreisatz für Wert i+1 imageline($im, $sx, $sy, $ex, $ey, $b); } imagejpeg($im, $name . "_auswertung.jpg"); imagedestroy($im);
Natürlich kann man die Berechnung für die Linien kleiner machen, aber ich habe es jetzt einmal ausführlich gemacht, um den Weg zu erläutern.
Für eine Linie braucht man zwei Punkte: Einen Startpunkt (s) und einen Endpunkt (e)
Für jeden dieser beiden Punkte müssen jetzt X- und Y-Position berechnet werden. Für X ist es ganz einfach:
x = Randbreite + Spaltennummer * Spaltenbreite
Für Y berechnet man zuerst die 0-Punkt-Höhe
y = Bildhöhe - Randbreite
und berechnet dann die Pixel für den Wert mit Hilfe des Dreisatzes
100% entspricht Zeilenhöhe f% entspricht ?
mit
Zeilenhöhe = Diagrammhöhe / Zeilenanzahl Diagrammhöhe = Bildhöhe - 2 * Randbreite
folgt:
? = f% * Zeilenhöhe / 100%
Wichtig: Der Wert wird von Y abgezogen weil der 0-Punkt des Koordinatensystems des Computers oben links ist und nicht unten links wie üblich!
y = (Bildhöhe - Randbreite) - f% * Zeilenhöhe / 100%
Beitrag zuletzt geändert: 12.6.2009 15:30:57 von sggesa -
Vielen Dank!
Es funktioniert! -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage