Aplikacja w NetBeans Swing

Odpowiedz Nowy wątek
2013-11-19 21:45

Rejestracja: 6 lat temu

Ostatnio: 6 lat temu

0

Na ćwiczeniach miałem zadanie żeby zrobić aplikację która umożliwia oszacowanie szukanej wartości przez symulację doświadczenia losowego, z ilustracją graficzną wyników doświadczenia. Zadanie wykonane jest dla całki oznaczonej x^2 * sin(x) w przedziale od 0 do 2.

Oryginalna treść znajduje się tu pkt I i II

http://www.it.pw.edu.pl/~mse/Ins2s3_13.pdf      

Gotowy kod to:

 `
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.util.Random;
import javax.swing.BorderFactory;
import javax.swing.JPanel;

public class Całka extends javax.swing.JFrame {

    long ldoświadczeń, lsukcesów;
    int lp = 1000;
    final double W = 2.469;
    double wynik = 0;
    Random r = new Random();
    Image obraz;
    Graphics bufor;
    PanelGraficzny panel = new PanelGraficzny();

public Całka() {
        initComponents();
        add(panel);
        obraz = createImage(panel.getWidth(), panel.getHeight());
        bufor = obraz.getGraphics();
        stanPoczątkowy(null);
        jTable1.setValueAt(W, 0, 3);}

class PanelGraficzny extends JPanel {

        public PanelGraficzny() {
            setBounds(20, 20, 200, 200);
            setBorder(BorderFactory.createLineBorder(Color.blue));
        }

        public void paintComponent(Graphics g) {
            g.drawImage(obraz, 0, 0, null);
        }
    }

private void ilustracjaDoświadczenia() {
        double x = 2 * r.nextDouble();
        double y = 4 * r.nextDouble();
        if (y <= x * x * Math.sin(x)) {
            lsukcesów++;
            bufor.setColor(Color.red);
        } else {
            bufor.setColor(Color.yellow);
        }
        int xp = (int) (x / 2 * panel.getWidth());
        int yp = panel.getHeight() - (int) (y / 4 * panel.getHeight());
        bufor.drawLine(xp, yp, xp, yp);
        wynik = 8.0 * lsukcesów / ldoświadczeń;
    }

private void seriaLosowań(java.awt.event.ActionEvent evt) {                             
        for (int i = 0; i < lp; i++) {
            ldoświadczeń++;
            ilustracjaDoświadczenia();
        }
        jTable1.setValueAt(ldoświadczeń, 0, 0);
        jTable1.setValueAt(lsukcesów, 0, 1);
        jTable1.setValueAt(wynik, 0, 2);
        panel.repaint();
    }                   
private void stanPoczątkowy(java.awt.event.ActionEvent evt) {                               
        ldoświadczeń = lsukcesów = 0;
        jTable1.setValueAt(0, 0, 0);
        jTable1.setValueAt(0, 0, 1);
        jTable1.setValueAt(null, 0, 2);
        bufor.setColor(Color.white);
        bufor.fillRect(0, 0, panel.getWidth(), panel.getHeight());

        panel.repaint();
  }             

                  public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new Symulacja().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JButton jButton1;
private javax.swing.JButton jButton2;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JScrollPane jScrollPane2;
private javax.swing.JTable jTable1;
private javax.swing.JTextArea jTextArea1;
// End of variables declaration
}`

Kod do ilustrowania całki
Kod:

 private void ilustracjaDoświadczenia() {
        double x = 2 * r.nextDouble();
        double y = 4 * r.nextDouble();
        if (y <= x * x * Math.sin(x)) {
            lsukcesów++;
            bufor.setColor(Color.red);
        } else {
            bufor.setColor(Color.yellow);
        }
        int xp = (int) (x / 2 * panel.getWidth());
        int yp = panel.getHeight() - (int) (y / 4 * panel.getHeight());
        bufor.drawLine(xp, yp, xp, yp);
        wynik = 8.0 * lsukcesów / ldoświadczeń;     

Pytanie moje brzmi następująco co muszę zmienić jeśli chciałbym zmienić granice całkowania np. od -2 do -1 ?

Jeszcze mam podaną stałą W=2.469 i jak bym ją chciał zmienić to musi być zapisana w postaci dziesiętnej? Bo jak chcę zapisać w postaci ułamka to po uruchomieniu w tabelce wyświetla mi wynik = 0. Ewentualnie gdybym miał liczbę W= pi ^3 -6pi lub 10-8e

Dodatkowo jaką instrukcje należało by dodać żeby liczba losowań "lp" była zależna od komponentu jSlider?

Pozostało 580 znaków

2013-11-20 00:53

Rejestracja: 6 lat temu

Ostatnio: 6 lat temu

0

Instrukcję do komponentu jSlider ogarnąłem. Jak by ktoś mi wytłumaczył pozostałe dwa punkty byłbym wdzięczny.

Pozostało 580 znaków

Odpowiedz

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