Rysowanie wykresu funkcji liniowej w Javie w prostym interfejsie graficznym

0

Witam, uczę się programować w Javie i chciałem napisać aplikację która będzie rysować prostą funkcję liniową. Wszystko działa dobrze pod warunkiem że współczynnik a = 0. W przeciwnym wypadku funkcja jest źle rysowana, nie mogę sobie z tym poradzić może ktoś mógłby mi coś podpowiedzieć ? Z góry dziękuję za pomoc.
Funkcja_Liniowa.jpg

 
public FunkcjaLiniowa() throws IOException 
    {
        initComponents();
        układWspółrzędnych();
    }
    public void układWspółrzędnych() throws IOException
    {
        File file = new File("C:\\Users\\Jare\\Dysk Google\\NetBeansProjects\\Funkcja_Liniowa\\ukad_wsprzdnych.bmp");
        BufferedImage bi = ImageIO.read(file);
        ImageIcon imgIcon = new ImageIcon(bi);
        labelFoto.setIcon(imgIcon);
    }
    public void paint(Graphics g, int x, int y)
    {
        g.setColor(Color.red);
        g.drawLine(x, y, x, y);
    }
 private void bRysujActionPerformed(java.awt.event.ActionEvent evt) {                                       
        int x,y,i = 400, b = 1, a = 1;
        a = Integer.parseInt(jTextField1.getText());
        b = Integer.parseInt(jTextField2.getText());
        b *= 40; b *= (-1);
        x = 0;
        y = 0;
               while( i >= 0 )
               {
                   y = a * i + b;  
                   paint(labelFoto.getGraphics(),x,y);
                   x++; 
                   i--;
               }
    }                    

1

Rysowanie musi sie odbywać w funkcji paintComponent(Graphics) (ewentualnie w funkcji paint(Graphics)). Jeśli nie wierzysz to uruchom swój program, narysuj wykres, zminimalizuj okno i przywróć okno.
Powinieneś wyliczyć współrzędne (w pikselach) obu końców wykresu i raz wywołać funkcję drawLine(xp,yp,xk,yk).
Zapewne ten wzór

y = a * i + b;

jest błędny. Poprawny wzór zależy od rozmiaru panelu i ilości pikseli na jednostkę, a tych wartości nie podałeś. Jeżeli panel ma rozmiar 400x400, a na jednostkę przypada 40 pikseli, to wzór winien wyglądać taky = a * i + b + 200 - 200*a;

0

Dzięki wszystko pięknie działa, powiedz mi tylko jeszcze czy we wzorze ma być 200 - 200*a; ponieważ 200,200 to punkt zerowy układu współrzędnych ?

0

Pewnie tak. Ja uzyskałem ten wzór z trzech innych wzorów (x i y to współrzędne matematyczne, w i k to numery wiersza i kolumny):

k = 40*x + 200
w = -40*y + 200
y= a*x + b

(b to wartość wpisana przez uzytkownika, bez mnożenia przez -40).
W tych wzorach 200 jest dlatego, że początek układu leży w punkcie (200,200)

1 użytkowników online, w tym zalogowanych: 0, gości: 1