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

Rispondi quotando