Rysowanie wykresu...

Odpowiedz Nowy wątek
2007-10-23 16:41

Rejestracja: 12 lat temu

Ostatnio: 11 lat temu

0

Pisze program wykreslajacy granice pomiedzy dwa grupami punktow, podstawie zadanych wspolrzednycyh puntkow, ktore powstaja przez klikniecie mysza w JPanel.

Na podstaiwe tych punktow i dodatkowych wag obliczam wagi[0] oraz wagi[1] bedace wagami oraz wagi[2] czyli teta.
nastepnie mam ze

int x1 = 0;
int y1 = wagi[2] - ((wagi[0]x1)/wagi[1]);
int x2 = 1000;
int y2 = wagi[2] - ((wagi[0]
x2)/wagi[1]);

i czasami wartosci obliczone y1,y2 sa tak duze ze g.drawLine(x1,y1,x2,y2); nie daje wyniku na JPanel, chociaz powinien :/

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.util.;
import javax.swing.
;
import java.awt.;
import java.awt.event.
;
import java.awt.geom.*;

public class Perceptron extends JFrame {

private JFrame ramka;
private JPanel gornyPanel;
private JPanel dolnyPanel;
private JButton startButton;
private JComboBox jComboBox;

int wagi[] = new int[] {0, 0, 0, 0};
int punkty[][] = new int [4][100];
int i = 0;
int rodzaj = 1;

private void startButtonActionPerformed(ActionEvent evt) {
    Random random = new Random();
    int ilosc_sklasyfikowanych = i;
    int numer;
    for(int j = 0; j < i; j++) {
        punkty[3][j] = 0;
    }

    while(ilosc_sklasyfikowanych > 0) {
        numer = random.nextInt(i);
        while (punkty[3][numer] != 0) {
            numer = random.nextInt(i);
//          System.out.println(numer + " numer");
        }           
        if ((wagi[0]*punkty[0][numer] + wagi[1]*punkty[1][numer]) > wagi[2]) {
            wagi[3] = 1;
        }
        else {
            wagi[3] = -1;
        }
        if (wagi[3] == punkty[2][numer]) {
            punkty[3][numer] = 1;
            ilosc_sklasyfikowanych--;
        }
        else {
            wagi[0] = wagi[0] + punkty[0][numer]*punkty[2][numer];
            wagi[1] = wagi[1] + punkty[1][numer]*punkty[2][numer];
            wagi[2] = wagi[2] - punkty[2][numer];

//          System.out.println(wagi[0] + " waga1");
//          System.out.println(wagi[1] + " waga2");
//          System.out.println(wagi[2] + " teta");

            for(int j = 0; j < i; j++) {
                punkty[3][j] = 0;
            }
            numer = random.nextInt(i);
            ilosc_sklasyfikowanych = i;
        }
    }

    System.out.println(wagi[0] + " waga1");
    System.out.println(wagi[1] + " waga2");
//  System.out.println(wagi[2] + " teta");

    int x1 = 0;
    int y1 = wagi[2] - ((wagi[0]*x1)/wagi[1]);
    int x2 = 1000;
    int y2 = wagi[2] - ((wagi[0]*x2)/wagi[1]);

    System.out.println(y1 + " y1");
    System.out.println(y2 + " y2");

    Graphics l = gornyPanel.getGraphics();
    l.setColor(Color.GREEN);
    l.drawLine(x1, y1, x2, y2);

//  l.setColor(Color.RED);
//  l.drawOval(x1,y1,2,2);
//  l.drawOval(x2,y2,2,2);
//  l.drawLine(-5,50,100,-100);
}

private void rodzajjComboboxActionPerformed(ActionEvent evt) {
    int option = jComboBox.getSelectedIndex();
    switch(option) {
        case 0: rodzaj = 1;
                break;
        case 1: rodzaj = -1;
                break;
    }
}   

private void gornyPanelmouseClicked(MouseEvent e) {

    punkty[0][i] = e.getX();
    punkty[1][i] = e.getY();
    punkty[2][i] = rodzaj;
    punkty[3][i] = 0;       

    Graphics g = gornyPanel.getGraphics();
    if (rodzaj == 1) {
        g.setColor(Color.RED);
    }
    else {
        g.setColor(Color.BLUE);
    }

    g.fillOval(punkty[0][i], punkty[1][i], 10, 10);

//  System.out.println(punkty[0][i]);
//  System.out.println(punkty[1][i]);
//  System.out.println(punkty[2][i]);

    i++;
}   

public Perceptron() {
    initComponents();
}

public void initComponents() {
    ramka = new JFrame();
    gornyPanel = new JPanel();
    dolnyPanel = new JPanel();
    startButton = new JButton();
    jComboBox = new JComboBox();

    ramka.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    gornyPanel.setLayout(new BorderLayout());
    gornyPanel.setBackground(new Color(222, 207, 177));
    gornyPanel.setPreferredSize(new Dimension(555, 404));      

    gornyPanel.addMouseListener(new MouseListener() {
        public void mousePressed(MouseEvent e) {
        }

        public void mouseReleased(MouseEvent e) {
        }

        public void mouseEntered(MouseEvent e) {
        }

        public void mouseExited(MouseEvent e) {
        }

        public void mouseClicked(MouseEvent e) {
            gornyPanelmouseClicked(e);
        }
    });

    dolnyPanel.setLayout(new FlowLayout());
    dolnyPanel.setBackground(new Color(240, 230, 212));

    startButton.setBackground(new Color(201,168,102));
    startButton.setText("START");
    startButton.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent evt) {
            startButtonActionPerformed(evt);
        }
    });
    dolnyPanel.add(startButton);

    jComboBox.setBackground(new Color(240, 230, 212));
    jComboBox.setModel(new DefaultComboBoxModel(new String[] { "C", "N" }));
    jComboBox.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent evt) {
            rodzajjComboboxActionPerformed(evt);
        }
    });
    dolnyPanel.add(jComboBox);       

    ramka.add(gornyPanel, BorderLayout.NORTH);
    ramka.add(dolnyPanel, BorderLayout.SOUTH);

    ramka.pack();
    ramka.setVisible(true);
}

public static void main(String[] args) {
//  System.out.println("Maciej");
    java.awt.EventQueue.invokeLater(new Runnable() {
        public void run() {
            new Perceptron();
        }
    });
}   

}

Pozostało 580 znaków

2007-10-23 23:59

Rejestracja: 12 lat temu

Ostatnio: 11 lat temu

0
stachu84 napisał(a)

int x1 = 0;
int y1 = wagi[2] - ((wagi[0]x1)/wagi[1]);
int x2 = 1000;
int y2 = wagi[2] - ((wagi[0]
x2)/wagi[1]);

Znalazlem blad, powyzszy wzor winine wygladac tak:

            int x1 = 0;
    int y1 = wagi[2]/wagi[1] - ((wagi[0]*x1)/wagi[1]);
    int x2 = 1000;
    int y2 = wagi[2]/wagi[1] - ((wagi[0]*x2)/wagi[1]);

Pozostało 580 znaków

Odpowiedz

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