Witamy na forum PC Format Zapraszamy do REJESTRACJI


Użytkownicy przeglądający ten wątek: 1 gości

Wykres Funkcji w Javie

#1
Wykres Funkcji w Javie
Witam od pewnego czasu a właściwie wstyd się przyznać od dwóch dni próbuje napisać aplikacje w Javie która po podaniu parametrów a,b,c funkcji kwadratowej nakreśli jej wykres.O ile udało mi się napisać kod który generuje układ współrzędnych i wykres(ale niestety nie pokrywają się miejsca zerowe oraz wierzchołek paraboli z współrzędnymi) to nie mam pojęcia jak zmusić metodę drawLine() do przejścia przez miejsca zerowe x1,x2 oraz wierzchołek paraboli.
Zaznaczam że interesuje mnie czy jest to wykonywalne przy pomocy metody drawLine().Jeśli jest to możliwe to proszę w punktach od czego zacząć.
Dzięki za wszelkie wskazówki
 System operacyjny: windows_eight Przeglądarka: ie
#2
RE: Wykres Funkcji w Javie
Witam, czy mógłbyś pokazać, w jaki sposób generujesz wykres? Wygląda na to, że dla miejsc zerowych i wierzchołka paraboli nie liczysz wartości funkcji, dlatego linia nie przechodzi dokładnie przez te punkty.
 System operacyjny: linux_ubuntu Przeglądarka: firefox
#3
RE: Wykres Funkcji w Javie
Dziękuję za odpowiedź program generuje wykres na panelu o rozmiarach 800*800.

Kod:
Code:
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));

}


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++;

}

}

}

Właśnie nie wiem jak po obliczeniu delty miejsc zerowych i wierzchołka zmusić drawLine() aby wykres przeszedł przez wszystkie te punkty.
Wczoraj grzebiąc jeszcze w internecie znalazłem na innym forum: https://4programmers.net/Forum/Java/2335...graficznym
użytkownika który miał podobny problem ale z funkcją liniową. Moderator zasugerował mu złe przeliczanie pixeli na jednostkę. I tu moje pytanie jak Moderator tamtego forum podał  wzór y = a  i + b + 200 - 200a; Ja nie potrafię z tych trzech wzorów uzyskać takiego jak powyższy. Dlaczego z wzoru giną wartości 40 i ostatnia wartość 200 jest mnożona przez a, skąd to wyszło?
Przepraszam z góry za tyle pytań ale jak to mówią tonący brzytwy się chwyta.
 System operacyjny: windows_eight Przeglądarka: ie
#4
RE: Wykres Funkcji w Javie
Jeśli przemieszczasz się od piksela do piksela, to dziwne, że jakimś sposobem omijasz miejsca zerowe. Napisałem samemu i u mnie jakoś działa (poniżej masz fragment kodu źródłowego).
Kod:
public NewJPanel(int w, int h, double xd, double xg, double yd, double yg, double a, double b, double c) {
        initComponents();

        setSize(new Dimension(w, h));
        this.xd = xd;
        this.yd = yd;
        this.xg = xg;
        this.yg = yg;
        this.a = a;
        this.b = b;
        this.c = c;
    }

    public void paint(Graphics g) {
        super.paint(g);

        g.setColor(Color.black);
        if (xd < 0 && xg > 0)
            g.drawLine((int)(-xd/(xg-xd)*getWidth()), 0, (int)(-xd/(xg-xd)*getWidth()), getHeight());
        if (yd < 0 && yg > 0)
            g.drawLine(0, (int)(getHeight()*(1+yd/(yg-yd))), getWidth(), (int)(getHeight()*(1+yd/(yg-yd))));

        g.setColor(Color.blue);
        double x1 =xd, x2, y1 = a*x1*x1 + b*x1 + c, y2;
        for (int px = 1; px < getWidth(); px++) {
            x2 = px*(xg-xd)/getWidth()+xd;
            y2 = a*x2*x2 + b*x2 + c;
            g.drawLine((int)((x1-xd)/(xg-xd)*getWidth()), (int)(getHeight()*(1-(y1-yd)/(yg-yd))), (int)((x2-xd)/(xg-xd)*getWidth()), (int)(getHeight()*(1-(y2-yd)/(yg-yd))));
            x1 = x2;
            y1 = y2;
        }
    }

    private final double xd, yd, xg, yg, a, b, c;
 System operacyjny: linux_ubuntu Przeglądarka: firefox
#5
RE: Wykres Funkcji w Javie
Szachisto wielkie dzięki za odpowiedź i za fatygę że chciało ci się napisać ten powyższy kod.
Ja daje sobie jeszcze 2 dni żeby napisać to samemu, muszę do tego dojść sam. Zawsze będę w ostateczności mógł się poratować twoim kodem,bardzo,bardzo dziękuje.
Pozdrawiam
 System operacyjny: windows_eight Przeglądarka: ie
Programy: Polecane / Nowe / Inne




Podobne wątki (Wykres Funkcji w Javie)
Wątek: Autor Odpowiedzi: Wyświetleń: Ostatni post
  VisualBasic - tablicowanie wartości funkcji . samanta19 2 10402 20.01.2017, 01:01
Ostatni post: samanta19
  [C++] Zwracanie dwóch wartości z funkcji (szukanie w. maksymalnej - tablica) Chudy2000 3 11266 16.06.2016, 08:10
Ostatni post: Szachista
Ściana Wywoływanie funkcji z tabelą jako argumentem jackhalabardnik 2 11456 22.03.2016, 21:20
Ostatni post: jackhalabardnik

Skocz do: