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 7166 20.01.2017, 01:01
Ostatni post: samanta19
  [C++] Zwracanie dwóch wartości z funkcji (szukanie w. maksymalnej - tablica) Chudy2000 3 7957 16.06.2016, 08:10
Ostatni post: Szachista
Ściana Wywoływanie funkcji z tabelą jako argumentem jackhalabardnik 2 8485 22.03.2016, 21:20
Ostatni post: jackhalabardnik

Skocz do:


Wybrane wątki (Wykres Funkcji w Javie)
Wątek: Autor Odpowiedzi: Wyświetleń: Ostatni post
  Środowisko do assemblera Physicist 4 5709 21.04.2019 14:04
Ostatni post: Ajgor
  VBA excel dmjs 6 5990 17.04.2019 10:20
Ostatni post: ptrick
  C++ - sens pogłębiania nauki gbr 5 6484 25.03.2019 12:53
Ostatni post: koneton
  Klasa wewnętrzna w C++ Physicist 4 6241 23.03.2019 18:28
Ostatni post: Physicist
  Ruby on Rails - tutoriale luciussulla 0 5467 23.03.2019 16:49
Ostatni post: luciussulla
Big Grin Czy dostane sie technikum informatycznego klaudiusz20046 6 8439 21.03.2019 01:28
Ostatni post: UnableToSee
  [C#] Program do moderacji czatów gier wiktrom12 0 6002 07.03.2019 15:33
Ostatni post: wiktrom12
  Mój pierwszy projekt - Pomoc rafal12999 1 6502 07.02.2019 22:01
Ostatni post: Szachista
  pomoc projekt scilab piesel18 2 7799 04.02.2019 09:03
Ostatni post: piesel18
  Szkoła Informatyczna Zikinan 1 6708 02.02.2019 17:59
Ostatni post: wojownikhaha
  [Java] Strona z zadaniami do rozwiązania i odpowiedziami rafal12999 2 7424 27.01.2019 13:44
Ostatni post: rafal12999
  kompilacja biblioteki Agui - cmake jurek2 0 6728 10.01.2019 13:12
Ostatni post: jurek2
  Zamiana całego zestawu znaków wg przyporządkowania BarHorab 5 7402 19.12.2018 16:45
Ostatni post: Szachista
  Sumowanie licz excel - problem OxyGenE 2 10236 19.12.2018 16:29
Ostatni post: Szachista
  Jaki kod pod pewne zdarzenia visualbasic 2010 aktywny27 4 7935 07.11.2018 13:41
Ostatni post: Ajgor