kostenloser Webspace werbefrei: lima-city


HILFE! - Ein mathematisches Problem (Grafiken erzeugen)

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    n*************h

    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
    $prozent_zwei = 200
    , dann würde die Zeile ja so heißen:

    imageline($im, 30, ((340/5) * 4) + 30, (540/9) + 30, ((340/5) * 3) + 30, $b);


    Also nochmal die Frage:
    Wie kriege ich das mit
    $prozent_zwei
    hin?

    Danke für eure schnelle Hilfe!

    PS: wenn ihr was nicht versteht, bitte schnell fragen. :wink:
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. 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
  4. Autor dieses Themas

    n*************h

    Vielen Dank!
    Es funktioniert! :wink:
  5. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!