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

    Pallina che rimbalza coi bordi e con le altre palline

    Salve, sto avendo qualche problema col rimbalzo tra palline in questo programma. Qualche idea?
    main :

    codice:
    import java.awt.Font;
    import static zuclib.GraficaSemplice.*;
    import static zuclib.Varie.*;
    public class Biliardo {
        static Palla[] p = new Palla[2];
    
    
        public static double mod(double d){
            return (d<0) ? d=-d : d;
        }
        
        public static void main(String[] args) {
            // TODO code application logic here
            for (int i = 0; i < p.length; i++) {
                p[i] = new Palla(0.1);
            }
            int temp;
            while(true)
                for (int i = 0; i < p.length; i++) {
                p[i].sposta();
                for (int j = 0; j < p.length; j++) {
                        if (i == j) break;
                        if (Math.sqrt(mod(p[i].y - p[j].y) * mod(p[i].y - p[j].y)
                            + mod(p[i].x - p[j].x) * mod(p[i].x - p[j].x)) <
                            p[i].dim+p[j].dim  && Math.sqrt(mod(p[i].y - p[j].y) * 
                            mod(p[i].y - p[j].y) + mod(p[i].x - p[j].x)
                            * mod(p[i].x - p[j].x))>= p[i].dim*2-0.02) 
                        {
                            temp = (int)(Math.sqrt(mod(p[i].y - p[j].y) * 
                            mod(p[i].y - p[j].y) + mod(p[i].x - p[j].x)
                            * mod(p[i].x - p[j].x))*((p[i].y-p[j].y)/(p[i].x-p[j].x))-(Math.PI/2));
                            
                                    
                            //temp = p[i].angolo+p[j].angolo/2;
                            p[i].angolo = 2*temp-p[i].angolo;
                            System.out.print("NOP ");
                            p[j].angolo = 2*temp-p[j].angolo;
                            break;
                        }
            }
        }
    
    
    }
    }

    classe palla

    codice:
    package biliardo;
    import java.awt.Font;
    import static zuclib.GraficaSemplice.*;
    import static zuclib.Varie.*;
    public class Palla {
        double x;
        double y;
        double dim;
        double vel;
        int angolo;
        double angoloR;
        double lettera;
        
        Palla(double r){
            dim=r;
            x=0.5;
            y=0.5;
            vel=0.1;
            angolo=(int)(Math.random()*360);
            cerchioPieno(x, y, dim, BLU);
            //sposta();
        }
        
        void sposta(){
            //    ritardo();
                cerchioPieno(x, y, dim, BIANCO);
                x+=Math.cos(Math.PI*angolo/180)*dim*vel;
                y+=Math.sin(Math.PI*angolo/180)*dim*vel;
                cerchioPieno(x, y, dim, CIANO);
                angolo=angolo%360;
                angoloR = Math.PI*angolo/180;
                if(x+dim>=1 || y+dim>=1 || x-dim<=0 || y-dim<=0){
                    if (x+dim>=1)
                    lettera = Math.PI/2;
                    else if (y+dim>=1)
                    lettera = Math.PI;
                    else if (x-dim<=0)
                    lettera = Math.PI*3/2;
                    else if (y-dim<=0)
                    lettera = 0;
                angoloR=2*lettera-angoloR;
                angolo = (int)(angoloR*180/Math.PI);
                
                
                }
            
        }
        
    }
    Ultima modifica di LeleFT; 15-05-2018 a 12:28 Motivo: Aggiunti i tag CODE

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 © 2024 vBulletin Solutions, Inc. All rights reserved.