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();
}
});
}
}