enigma!

Aperto da puntanera, 01 Agosto 2007, 12:10:51

Discussione precedente - Discussione successiva

0 Utenti e 1 Visitatore stanno visualizzando questa discussione.

puntanera

non riesco a capire perchè quando clicco col tasto sinistro del mouse, l'applet mi fa la retta e il punto, ma quando cancello un punto col tasto destro non mi rifà la retta, e il prompt dei comandi mi da il problema sulla posizione del vector che contiene l'oggetto che ho cancellato:
grazie per l'aiuto!

import java.awt.*;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.MouseEvent;
import java.awt.event.MouseAdapter;
import java.awt.geom.Ellipse2D;
import java.awt.Color;
import java.awt.Shape;
import java.awt.Font;
import java.awt.geom.Line2D;
import java.util.*;
public class David extends java.applet.Applet{
private double x;
private double y;
private Ellipse2D.Double ellisse;
private Ellipse2D.Double ellisse2;
private int numPunti;
private String messaggio;
private double a,b,c,d,z,q;
private double alfa, beta, puntoB, som, somm, son, sonn, mol, molt;
private Line2D.Double line;
private int numLinee;
private Vector vector;

public David() {
numPunti = 0;
//punti = new Ellipse2D.Double[10];
//29
this.vector = new Vector(1,1);


class AscoltaClick extends MouseAdapter{
public void mousePressed(MouseEvent e){
//chiamata alla superclasse mouseClicked
super.mouseClicked(e);
/*MouseEvent.BUTTON1 questo metodo setta i punti cliccati
* soltanto con il tasto sinistro del mouse*/
if(e.getButton()==MouseEvent.BUTTON1){
x = e.getX();
y = e.getY();
//all'interno dell'array punti creo un nuovo oggetto Ellipse2D che a sua volta ha quattro cordinate (x-2 , y-2 , 4 , 4)
ellisse = new Ellipse2D.Double(x-2 , y-2 , 4 , 4);
numPunti++; //46
vector.add(ellisse);
if(numPunti==1){
messaggio = "aggiungi almeno un'altro punto";
}
if(numPunti>=2){
RettaRegressione();
}
/*
if(numPunti>=2){
a = mediaX(vector);
b = mediaY(vector);
c = quad(vector);
d = sommaProd(vector);
beta = bet( a , b , c , d , numPunti );
alfa = alf( a , b , beta );
puntoB = alfa + (beta * 500);
line = new Line2D.Double( 0 , alfa , 500 , puntoB );

}
*/

//chiuso il metodo if(e.getButton()==MouseEvent.BUTTON1)
repaint();
}
if(e.getButton()==MouseEvent.BUTTON3) {
x = e.getX();
y = e.getY();
Ellipse2D eli;

for(double i=0; i<10; i++){
ellisse2 = new Ellipse2D.Double(x-(i/2) , y-(i/2) , i , i);
for(int j=0; jeli = vector.get(j);
z = eli.getCenterX();
q = eli.getCenterY();
if(ellisse2.contains(z,q)){
vector.remove(eli);
break;
}
}
}
RettaRegressione();
repaint();
}
}
}


MouseAdapter ascoltaEventi = new AscoltaClick();
addMouseListener(ascoltaEventi);
}

public void RettaRegressione(){
if(numPunti>=2){
a = mediaX(vector);
b = mediaY(vector);
c = quad(vector);
d = sommaProd(vector);
beta = bet( a , b , c , d , numPunti );
alfa = alf( a , b , beta );
puntoB = alfa + (beta * 500);
line = new Line2D.Double( 0 , alfa , 500 , puntoB );

}
}
public double mediaX(Vector x){
double media = 0;
double somma= 0;
Ellipse2D e;
for(int i=0; ie = x.get(i);
somma += e.getCenterX();
media = somma / x.size();
}
return media;
}
public double mediaY(Vector y){
double media = 0;
double somma= 0;
Ellipse2D e;
for(int i=0; ie = y.get(i);
somma += e.getCenterY();
media = somma / y.size();
}
return media;
}
public double quad(Vector x){
double som= 0;
Ellipse2D e;
for(int i=0; ie = x.get(i);
mol = e.getCenterX()*e.getCenterX();
som += mol;
}
return som;
}
public double sommaProd(Vector y){
double somm=0;
Ellipse2D e;
for(int i=0; ie = y.get(i);
molt = (e.getCenterX()*e.getCenterY());
somm += molt;
}
return somm;
}
public double bet(double mediaX, double mediaY,double quad, double sommaProd, int numPunti) {
double b, c, d;
b = sommaProd - (numPunti * mediaX *mediaY);
c = quad - (numPunti * mediaX * mediaX);
d = b / c;
return d;
}
public double alf(double mediaX, double mediaY, double beta){
double al;
al = mediaY - (beta * mediaX) ;
return al;
}
public void paint(Graphics g) { //137
Graphics2D g2 = (Graphics2D) g;
g2.clearRect(0, 0, getWidth()-1, getHeight()-1);
g2.setColor(Color.red);
for(int i=0; ig2.fill((Shape) vector.get(i));
}

if(numPunti>=2)
{ g2.setColor(Color.red);
g2.draw(line);}
if(numPunti==1) {
Font carattere = new Font("Serif", Font.BOLD, 24);
g2.setFont(carattere);
g2.setColor(Color.blue);
g2.drawString(messaggio, 10, getHeight()-10);}
}
}