Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    [Java] Pallina rimbalzante

    Il mio obbiettivo sarebbe quello di creare una Applet che raffigura una pallina che rimbalza perpetuamente sulle pareti dello schermo. Purtroppo l'algoritmo che ho fatto funziona solo per certi valori della posizione iniziale della pallina e della direzione iniziale. Infatti, per farvi capire, nel codice postato ho messo questi valori costanti. E infatti, con questi valori, non funziona! L'idea però sarebbe di immettere le coordinate della pallina e la direzione in modo casuale, utilizzando la classe Random.

    Non riesco proprio a vedere la falla in questo algoritmo.

    Grazie dell'aiuto che mi darete .

    codice:
    import java.awt.*;
    import java.applet.*;
    import java.util.Random;
    
    public class Rimbalzo extends Applet implements Runnable{
    	
    	Random gnc=new Random();
    	Palla pallina;
    	double incremento=1.;
    	double mRetta,qRetta;
    
    	public void init(){
    		pallina=new Cerchietto(30, new Point(50,50),Color.blue);
    		
    		do{
    		mRetta=(pallina.getCentro().getY()-70)/(pallina.getCentro().getX()-35);
    		
    		}
    		while(mRetta==Double.NEGATIVE_INFINITY||mRetta==Double.POSITIVE_INFINITY||
            mRetta==0); // ciclo se mRetta è casuale
    		
    		qRetta=-mRetta*pallina.getCentro().getX()+pallina.getCentro().getY();
    	}
    	
    	public void start(){
    		Thread t=new Thread(this);
    		t.start();
    	}
    	
    	public void run() {
    		
    		double x,y;
    		
    		for(; ; ){
    			try{
    				Thread.sleep(5);
    			}
    			 catch (InterruptedException e) {}
    			 
     if(pallina.getCentro().getX()==getSize().width-pallina.getDiametro()/2
                             ||pallina.getCentro().getX()==pallina.getDiametro()/2){
    				 mRetta=-mRetta;
    				 incremento=-incremento;
    			 }
    			 
    if (pallina.getCentro().getY()==getSize().getHeight()- pallina.getDiametro()/2
    ||pallina.getCentro().getY()==pallina.getDiametro()/2)
                             {
    				 mRetta=-mRetta; 
    			 }
    
    			 
    			 x=pallina.getCentro().getX()+incremento;
    			 
    			 qRetta=-mRetta*pallina.getCentro().getX()+pallina.getCentro().getY();
    			 
    			 y=x*mRetta+qRetta;
    			 
    			 pallina.setPosizione(new Point((int)x,(int)y));
    			 
    			 repaint();
    			 
    		}
    
    	}
    	
    	public void paint(Graphics g){
    		pallina.disegna(g);
    	}
    	
    
    
    	
    }
    Questa è la classe palla:

    codice:
    import java.awt.*;
    
    public class Palla {
    	
    	int diametro, xCorner, yCorner;
    	Color colore;
    	Point centro;
    	
    	public Cerchietto(int _diametro, Point _centro, Color _colore ){
    		diametro=_diametro;
    		centro=_centro;
    		xCorner = (int)centro.getX() - diametro / 2;
            yCorner = (int)centro.getY() - diametro / 2;
            colore=_colore;
    	}
    
    	public void disegna(Graphics g){
    		g.setColor(colore);
    		g.fillOval(xCorner,yCorner,diametro,diametro);
    	}
    	
    	public void setPosizione(Point _centro){
    		centro=_centro;
    	    xCorner = (int)centro.getX() - diametro / 2;
    	    yCorner = (int)centro.getY() - diametro / 2;
    	}
    	
    	public void setDiametro(int _diametro){
    		diametro=_diametro;
    	}
    	
    	public Point getCentro(){
    		return centro;
    	}
    	
    	public int getDiametro(){
    		return diametro;
    	}
    
    	
    }

  2. #2
    ho già una soluzione al problema che consiste in un algoritmo molto più snello del mio.

    Ma volevo proprio capire dove il mio (anche se non sarà uno dei più "belli" algoritmi possibili) è sbagliato.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.