Verständnisfrage.

Status
Nicht offen für weitere Antworten.

Kussefar

Mitglied
Hi,

also ich hatte als hausaufgabe auf, ein eine x² funktion in ein Koordinatensystem zu zeichen....

Dies habe ich so gelöst:

Code:
import java.awt.*;
import java.applet.*;

public class ZeichneFunktion extends Applet
 {
   int m,x0,y0,xNeu,yNeu;
   Graphics Stift;
   public void init()
    {
      m = 50; x0 = 200; y0 = 200;
      setBackground(Color.black);
    }
   public void zeicheKoordinatensystem()
    {
      Stift.setColor(Color.white);
      Stift.drawLine(0,y0,2*x0,y0);
      Stift.drawLine(x0,0,x0,2*y0);
      
      for(int i=0;i<400;i=i+20)
       {
         Stift.drawLine(i,y0+3,i,y0-3);
       }
      for(int i=0;i<400;i=i+20)
       {
         Stift.drawLine(x0+3,i,x0-3,i);
       }

    }
   public void Funktion()
    {
     for (int i=-100;i<100;i++)
      {
        double x = (double)i/m;
        double y = f(x);
        
        if(yNeu(y)<200)
        Stift.drawLine(xNeu(x),yNeu(y),xNeu(x),yNeu(y));
      }
    }
    
   public void paint(Graphics g)
    {
      Stift = g;
      zeicheKoordinatensystem();
      Funktion();
    }
    
   double f(double x)
    {
      return x*x;
    }
   int xNeu(double x)
    {
      return xNeu = (int) (x0+m*x);
    }
   int yNeu(double y)
    {
      return yNeu = (int) (y0-m*y);
    }
 }

jetzt meine Frage:
Der Befehl Stift.drawLine kann ja irgendwie nur int zahlen malen...
Also habe ich alle double in int umgewandelt, dann zeichnet er auch alles perfekt, aber warum zeichnet er jetzt auch ungerade werte??


mfg
 
Gegenfrage: wieso sollten ungerade Werte nicht gezeichnet werden? Was meinst du überhaupt mit "ungeraden" Werten?
 
Ach so. Die werden einfach abgerundet. Aus 1.27 wird 1, aus 1.99998 wird auch 1 :wink:
 
Kussefar hat gesagt.:
Schon klar ! :wink:
Aber dieser befehl drawLine kann ja angeblich nur int , also ganze zahlen, zeichnen.....
Klar, weil das Programm nur ganze Pixel darstellen kann. Deshalb musst du dafür sorgen, dass der richtige Pixel ausgewählt wird. Um dann auch das Aufrunden zu ermöglichen, benutzt du Math.round() oder addierst direkt 0.5 vor dem Cast zum int: int pixel = (int)(pos + 0.5);
 
also: du hast im Methodenaufruf ein (int) vor den double-Wert geschrieben, dass sorgt dafür, dass de VM den double in ein int umwandelt, bevor sie ihn an die Funktion zurückgibt. Das tut sie indem sie die Nachkommastellen "abschneidet" aus 1.25 wird also 1, aus 1.65 wird 1 usw...
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben