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 6880 20.01.2017, 01:01
Ostatni post: samanta19
  [C++] Zwracanie dwóch wartości z funkcji (szukanie w. maksymalnej - tablica) Chudy2000 3 7703 16.06.2016, 08:10
Ostatni post: Szachista
Ściana Wywoływanie funkcji z tabelą jako argumentem jackhalabardnik 2 8239 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
  kompilacja biblioteki Agui - cmake jurek2 0 5781 10.01.2019 13:12
Ostatni post: jurek2
  Zamiana całego zestawu znaków wg przyporządkowania BarHorab 5 6449 19.12.2018 16:45
Ostatni post: Szachista
  Sumowanie licz excel - problem OxyGenE 2 9346 19.12.2018 16:29
Ostatni post: Szachista
  Jaki kod pod pewne zdarzenia visualbasic 2010 aktywny27 4 7016 07.11.2018 13:41
Ostatni post: Ajgor
Scared Ipad Pro programowanie? NissmoOne 4 7651 06.10.2018 12:22
Ostatni post: NissmoOne
  C# pierwsza pusta komórka Excel DonCorleone 0 7169 21.09.2018 16:58
Ostatni post: DonCorleone
  .bat nie kompresuje plików GIENTY 3 7531 06.09.2018 07:20
Ostatni post: broda99
  problem z programem .bat wiktrom12 4 8651 30.08.2018 08:25
Ostatni post: wiktrom12
  Silnik do gier ZigglerGames 1 7380 23.08.2018 09:03
Ostatni post: Szachista
  Chciałbym zrobić prosty plik exe z jedną funkcją densour 4 8097 09.08.2018 16:24
Ostatni post: Ajgor
  Który język wybrać do stworzenia aplikacji synchronizujące pliki z urządzeniem mobiln Elemental 2 2337 18.07.2018 12:05
Ostatni post: Ajgor
  Pomysł napisania programu ROM FireBytes 3 8743 28.06.2018 16:56
Ostatni post: FireBytes
  [VBA] Tworzenie nowego arkusza z danymi z TextBox'a Pioro 4 8993 19.06.2018 23:24
Ostatni post: broda99
  Potwierdzenie na maila po wysłaniu pliku coci 0 8200 13.06.2018 20:37
Ostatni post: coci
  Pieczętowanie Archiwum Jar - Po co? wanhelsing 3 8813 19.05.2018 20:55
Ostatni post: koneton