Wykres Funkcji Kwadratowej

0

Witam, próbuję napisać program, który rozwiązuje i rysuje wykres funkcji kwadratowej. Doszedłem do punktu, w którym nie mam pojęcia już co mam robić. Próbowałem naprawdę wielu rzeczy. Oto mój kod;

 public class Wykres extends JPanel {
	Interface i = new Interface();
	JFrame o = i.okno;
    double a = i.getliczbaa();
    double b = i.getliczbab();
    double c = i.getliczbac();
    public double x = 0;
    
    public double f(double x) {
    	return (a*x*x)+(b*x)+c;
    }
    
    public Wykres() {
        setPreferredSize(new Dimension(800, 800));
    }
    
    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2d = (Graphics2D) g;
        o.dispose();
        Line2D osx = new Line2D.Double(0, 400, 800, 400);
        Line2D osy = new Line2D.Double(400, 0, 400, 800);
        g2d.draw(osx);
        g2d.draw(osy);
    	//System.out.println(f(1));
    	double sizex = 800;
    	double sizey = 800;
        int maxx = 10;
        int minx = -10;
        int maxy = 10;
        int miny = -10;
        double xunit = (maxx-minx)/sizex; //0,025
        //System.out.println(xunit);
        double yunit = (maxy-miny)/sizey;
        int x0 = 400;
        int y0 = 400;
        while (x<801) {
        	double y = (f((x)*xunit)*yunit);
        	System.out.println(y);
        	double y2=(f((x+1)*xunit)*yunit);
        	//System.out.println(y);
        	Line2D w = new Line2D.Double(x, y, (x+1), y2);
        	g2d.draw(w);
        	x++;
        	System.out.println(x);
        }
    }
}
0

Jakie jest pytanie?

0

Co jest napisane nie tak, co trzeba zmienić żeby wykres był poprawnie rysowany? Próbowałem paru rzeczy, między innymi normalne obliczanie wartości y = ax^2+bx+c i rysowanie pixelu na tym miejscu w loopie i niestety nie dawało to oczekiwanego efektu, była rysowana tylko część paraboli. Próbowałem zmienić kod, żeby uwzględniało ile pixeli znajduje się w danej dziedzinie; jak wyżej w kodzie, ale według pierwszego posta wykres nie rysuje się. Na panelu po uruchomieniu programu na którym powinnien być wykres znajdują się tylko dwie osie i nic poza tym.

1

Błędnie przeliczasz piksele na wartości zmiennych x,y i na odwrót. Nie uwzględniasz tego, że oś y jest skierowana w dół. Metoda paintComponent ma niewłaściwą sygnaturę. miny i maxy miały zdecydowanie za małą wartość bezwzględną - wykres uciekał poza panel.

        public void paintComponent(Graphics g) 
        {
            super.paintComponent(g);
            g.drawLine(0, 400, 800, 400);
            g.drawLine(400, 0, 400, 800);
            double sizex = 800.0;
            double sizey = 800.0;
            int maxx = 10;
            int minx = -10;
            int maxy = 100;
            int miny = -100;
            double yunit = sizey/(maxy-miny);
            int pixel = 0;
            while (pixel<800) 
            {
                double x = -10 + 0.025*pixel;
                double x2 = -10 + 0.025*(pixel+1); 
                int y = 400 - (int)(f(x)*yunit);
                int y2 = 400 - (int)(f((x2))*yunit);
                g.drawLine(pixel, y, (pixel+1), y2);
                pixel++;
            }
        } 
0

Działa jak marzenie, dzięki wielkie za pomoc

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