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