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 6741 20.01.2017, 01:01
Ostatni post: samanta19
  [C++] Zwracanie dwóch wartości z funkcji (szukanie w. maksymalnej - tablica) Chudy2000 3 7573 16.06.2016, 08:10
Ostatni post: Szachista
Ściana Wywoływanie funkcji z tabelą jako argumentem jackhalabardnik 2 8109 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
  Pieczętowanie Archiwum Jar - Po co? wanhelsing 3 8351 19.05.2018 20:55
Ostatni post: koneton
  Wyszukiwarka w spawnerze nie reaguje na polskie znaki kazik666 0 8152 16.05.2018 12:04
Ostatni post: kazik666
  BASH symulator silnika dawswi1 3 8603 13.05.2018 10:43
Ostatni post: Szachista
  Autohotkey automatyczny zapis TheProgson 0 8211 07.05.2018 21:27
Ostatni post: TheProgson
  VBA Pobieranie wybranych plików z danymi julietta03 1 8463 04.05.2018 08:25
Ostatni post: broda99
  [VBA] Przenoszenie danych między formularzami Pioro 4 8856 23.04.2018 11:48
Ostatni post: broda99
  Skrypt, który szuka i zamienia armen10 2 8675 23.04.2018 10:04
Ostatni post: armen10
  Liniowa regresja w Pythonie a budowanie modelu Trojan3000 2 8834 16.04.2018 13:26
Ostatni post: Trojan3000
  Początki z bashem - jak napisać skrypty: wysłanie maila i kalkulator? Kristov81 4 12650 21.03.2018 18:32
Ostatni post: Szachista
Ściana Zadanie cmd.... Yanke$ 2 9827 16.03.2018 17:20
Ostatni post: FireBytes
  Poszukuj kogoś do pomocy FireBytes 0 8675 16.03.2018 16:58
Ostatni post: FireBytes
  Program liczący liczby pierwsze Mersenne'a raistin 2 8921 12.03.2018 12:51
Ostatni post: Szachista
  [SQL]procedura zliczania czasu CTRL85 0 8900 17.02.2018 12:58
Ostatni post: CTRL85
  [VBA Excel] Zaokrąglanie liczby w górę Pioro 2 10141 13.02.2018 21:25
Ostatni post: Pioro
  Sumowanie czasu excel. Cixi 7 8976 13.02.2018 11:52
Ostatni post: Cixi