Ankündigung

Einklappen
Keine Ankündigung bisher.

Funktion in Koordinatensystem zeichnen - Finde Fehler nicht

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Funktion in Koordinatensystem zeichnen - Finde Fehler nicht

    Hey!
    Ich hab versucht ein Script zu schreiben, das eine eingegebene Funktion in ein Koordinatensysten zeichnet und eine kleine Wertetabelle macht. Das funktioniert auch ganz gut, nur wenn ich eine positive Zahl eingebe, gehts nicht mehr. Also "x^2-3x-5" geht, aber "x^2+3x+5" nicht. Ich glaub ich hab das auch schon kaputgebalstelt, weil ich an dem problem schon so lange sitze. Wäre cool, wenn ihr mal gcken könntet, wo mein Fehler liegt. Es soll anfangs nur ganz einfach sein und nicht viel können, aber dass es erstmal überhaupt richtig funktioniert. Danke schonmal.
    PHP-Code:
    <?php
    function generate_pixel($x$y$image){
     global 
    $breite;
     global 
    $hoehe;
     global 
    $abstand;
     
    #####  Hier müsste der Fehler sein: #####
     
    $x $breite/+ ($x*$abstand);
     
    $y $hoehe /- ($y*$abstand); 
     
    imageline($image$x$y$x$yimagecolorallocate($image,255,0,0)); 
     
    # imagesetpixel hat komischerweise nicht funktioniert... Dann musste ich imageline nehmen.
    }
    $breite 600;
    $hoehe 600;
    $abstand 30;

    if(
    $generate){
      
    header("Content-type: image/jpeg");
      
      
    $image imagecreate($breite,$hoehe); 
      
    $farbe_body imagecolorallocate($image,100,100,200); 
      
    $farbe_lines imagecolorallocate($image,0,0,0);
      
      
    $a_of_x = ($breite/2)/$abstand;
      
    $a_of_y = ($hoehe/2)/$abstand;
      
      for(
    $i=$a_of_x*(-1);$i<=$a_of_x;$i $i 0.0025){
       
    $function2 str_replace("x"$i$function);
       eval(
    "\$y = ".$function2.";");            
      
      
    # imagesetpixel($image, x_to_koord($i), y_to_koord($y), $farbe_lines)
       
    generate_pixel($i$y$image);
      }
      
     
    # Koordinatensystem zeichnen (x):
      
    imageline($image0$hoehe/2$breite$hoehe/2$farbe_lines);
      for(
    $i=1;$i<=$a_of_x;$i++){
       
    imageline($image,    $breite/2+($i*$abstand), $hoehe/2+5$breite/2+($i*$abstand), $hoehe/2-5$farbe_lines);
       
    imagechar($image5$breite/2+($i*$abstand)-3$hoehe/2+10$i$farbe_lines);  
       
    imageline($image,    $breite/2-($i*$abstand), $hoehe/2+5$breite/2-($i*$abstand), $hoehe/2-5$farbe_lines); 
       
    imagechar($image5$breite/2-($i*$abstand)-7$hoehe/2+10"-"$farbe_lines);    
       
    imagechar($image5$breite/2-($i*$abstand)+2$hoehe/2+10$i$farbe_lines);   
      
    # Andere Funktion, da sonst Fehler bei der Anzeige von mehrstelligen Zahlen
      
    }
      
     
    # Koordinatensystem zeichnen (y):
      
    imageline($image$breite/20$breite/2$hoehe$farbe_lines);
      for(
    $i=1;$i<=$a_of_y;$i++){
       
    imageline($image,    $breite/2+5,  $hoehe/2+($i*$abstand), $breite/2-5$hoehe/2+($i*$abstand), $farbe_lines);
       
    imagechar($image5$breite/2+10$hoehe/2+($i*$abstand)-8"-"$farbe_lines);     
       
    imagechar($image5$breite/2+20$hoehe/2+($i*$abstand)-8$i$farbe_lines);   
       
    imageline($image,    $breite/2+5,  $hoehe/2-($i*$abstand), $breite/2-5$hoehe/2-($i*$abstand), $farbe_lines); 
       
    imagechar($image5$breite/2+10$hoehe/2-($i*$abstand)-8$i$farbe_lines);    
      
    # Andere Funktion, da sonst Fehler bei der Anzeige von mehrstelligen Zahlen
      
    }
      
    #################################################################
      
      
    imagegif($image); 
    }
    ?>

  • #2
    header("Content-type: image/jpeg");
    imagegif($image);
    Zwar erstmal nicht die Antwort auf deine Frage, aber beim groben Überflug gesehen.

    Der Header wird als JPEG gesendet, obwohl ein GIF-Bild erstellt wird ?

    Kommentar


    • #3
      So ich habe mir das jetzt mal kurz reingezogen.
      Zunächst ein anderes Beispiel, was ich mal vor einiger Zeit gemacht hatte:
      http://www.cix88.de/cix_php/php_graf...natenkreuz.php
      Vieleicht bringt dich das auf neue Ideen.

      Ich geh jetzt mal ganz grob durch:

      imageline($image, $x, $y, $x, $y, imagecolorallocate($image,255,0,0));
      Hier wohl kaum eine Linie zu sehen sein, da $x und $y selbe Werte haben.
      Es müsste so aussehen:
      imageline($image, $x1, $y1, $x2, $y2, imagecolorallocate($image,255,0,0));
      Wobei $x2 > $x1 ist, und $y2 > $y1

      for($i=$a_of_x*(-1);$i<=$a_of_x;$i = $i + 0.0025){
      Keine Ahnung was die 0.0025 soll ?
      Da das ganze auf PX basiert, wundert mich etwas diese Angabe.

      $function2 = str_replace("x", $i, $function);
      eval("\$y = ".$function2.";");
      Hier hat sich das Script aufgehangen, jedenfalls bei mir.
      Keine Ahnung wozu diese 2 Zeilen gedacht sind ?

      if($generate){
      Was ist $generate ?
      Zum Testen habe ich dein Script etwas umgebastelt, um überhaupt nachvollziehen zu können, um was es geht.

      PHP-Code:
      <?php
      function generate_pixel($x$y$image){ 
       global 
      $breite
       global 
      $hoehe
       global 
      $abstand
       
      #####  Hier müsste der Fehler sein: ##### 
       
      $x $breite/+ ($x*$abstand); 
       
      $y $hoehe /- ($y*$abstand);
       
      imageline($image$x$y$x+50$y+50imagecolorallocate($image,255,0,0));  
       
      # imagesetpixel hat komischerweise nicht funktioniert... Dann musste ich imageline nehmen. 

      $breite 600
      $hoehe 600
      $abstand 30

      // if($generate){ 
        // header("Content-type: image/jpeg"); 
         
        
      $image imagecreate($breite,$hoehe);  
        
      $farbe_body imagecolorallocate($image,100,100,200);  
        
      $farbe_lines imagecolorallocate($image,0,0,0); 
         
        
      $a_of_x = ($breite/2)/$abstand
        
      $a_of_y = ($hoehe/2)/$abstand
         
       for( 
      $i $a_of_x*(-1); $i <= $a_of_x$i += 0.0025 ){ 
      #   $function2 = str_replace("x", $i, $function); 
      #   eval("\$y = ".$function2.";");
      #  # imagesetpixel($image, x_to_koord($i), y_to_koord($y), $farbe_lines) 
         
      generate_pixel($i$y$image); 
        } 
         
       
      # Koordinatensystem zeichnen (x): 
        
      imageline($image0$hoehe/2$breite$hoehe/2$farbe_lines); 
        for(
      $i=1;$i<=$a_of_x;$i++){ 
         
      imageline($image,    $breite/2+($i*$abstand), $hoehe/2+5$breite/2+($i*$abstand), $hoehe/2-5$farbe_lines); 
         
      imagechar($image5$breite/2+($i*$abstand)-3$hoehe/2+10$i$farbe_lines);   
         
      imageline($image,    $breite/2-($i*$abstand), $hoehe/2+5$breite/2-($i*$abstand), $hoehe/2-5$farbe_lines);  
         
      imagechar($image5$breite/2-($i*$abstand)-7$hoehe/2+10"-"$farbe_lines);     
         
      imagechar($image5$breite/2-($i*$abstand)+2$hoehe/2+10$i$farbe_lines);    
        
      # Andere Funktion, da sonst Fehler bei der Anzeige von mehrstelligen Zahlen 
        

         
       
      # Koordinatensystem zeichnen (y): 
        
      imageline($image$breite/20$breite/2$hoehe$farbe_lines); 
        for(
      $i=1;$i<=$a_of_y;$i++){ 
         
      imageline($image,    $breite/2+5,  $hoehe/2+($i*$abstand), $breite/2-5$hoehe/2+($i*$abstand), $farbe_lines); 
         
      imagechar($image5$breite/2+10$hoehe/2+($i*$abstand)-8"-"$farbe_lines);      
         
      imagechar($image5$breite/2+20$hoehe/2+($i*$abstand)-8$i$farbe_lines);    
         
      imageline($image,    $breite/2+5,  $hoehe/2-($i*$abstand), $breite/2-5$hoehe/2-($i*$abstand), $farbe_lines);  
         
      imagechar($image5$breite/2+10$hoehe/2-($i*$abstand)-8$i$farbe_lines);     
        
      # Andere Funktion, da sonst Fehler bei der Anzeige von mehrstelligen Zahlen 
        // } 
        ################################################################# 
         
        
      imagegif($image'$$$.gif');  


      echo 
      '[img]$$$.gif[/img]';

      ?>
      So sah es jetzt zum testen bei mir aus.
      Mehr kann ich jetzt auch nicht tun, da ich grad wenig Zeit habe.

      Kommentar


      • #4
        Erstmal danke für deine Antwort!
        Zu den Fragen:
        Ich geh jetzt mal ganz grob durch:

        Zitat:
        imageline($image, $x, $y, $x, $y, imagecolorallocate($image,255,0,0));
        Das musste ich machen, weil die funktion "imagesetpixel" komischerweise nicht funktioniert hat. So hab ich eben eine Linie der Länge 1 gemacht. Also einen Punkt

        Keine Ahnung was die 0.0025 soll ?
        Da das ganze auf PX basiert, wundert mich etwas diese Angabe.

        Zitat:
        $function2 = str_replace("x", $i, $function);
        eval("\$y = ".$function2.";");
        Das war notwendig, um die Genauigkeit einzustellen. Wäre das 1, würde er nur an alle $abstand Pixel einen punkt machen und keine Funktion zeichnen. bei 0.25 sind es Punkte mit Abständen dazwischen. usw.

        Zitat: if($generate){
        Was ist $generate ?
        Das gehört zum übrigen Script. Das was ich gepostet hab ist nämlich nur ein Teil davon. $generate wird benutzt, um dem script zu sagen, dass er jetzt zeichnen soll. Es erstellt nämlich erst eine Wertetabelle und zeichnet die Funktion dann.

        Ich stell das Script gleich mal online, dann kann man sich auch ansehen, was bis jetzt alles geht und was nicht:
        Script: http://www.die-neue-welt.net/temp/funktion.php
        Code: http://www.die-neue-welt.net/temp/funktion.txt

        Das ist der aktuelle Fortschritt. Aber nicht wundern, da sind noch 2 Funktionen drin, die im Moment nicht benötigt werden (y_to_koord und x_to_koord) und viele Kommentare und alte Codeschnipsel. Ich hoffe ihr blickt da durch. Und das ist die "Diagnose-Version" -> Deshalb die ganzen Ausgaben der Punkte und Pixel...

        Kommentar


        • #5
          Das musste ich machen, weil die funktion "imagesetpixel" komischerweise nicht funktioniert hat.
          Dann war diese sicher falsch geschrieben

          Kommentar


          • #6
            *no_comment*

            Kommentar

            Lädt...
            X