20x20x10 マイルで 10 分以内の架空のボックス内での衝突の可能性を探しています。すべての平面には、位置 (x、y、z) と速度の配列があります。毎秒衝突をテストして結果を出力していますが、無限ループがあるようで、predictX、predictY、predictZ メソッドから得られる結果はすべて同じです。問題を解決する方法についての提案は大歓迎です!
import java.util.Random;
public class Plane {
double[] p=new double[3];
double[] v=new double[3];
public Plane(double[] p, double[] v)
{
this.p=p;
this.v=v;
}
public static void main(String[] args) {
int NUMBER_OF_PLANE = 100;
Random r=new Random(); //initialize random seed
int i;
double[] p={.1,.1,.1}; double[] v={.1,.1,.1};
Plane[] ac= new Plane [100];
for (i=0; i<NUMBER_OF_PLANE;i++){
ac[i] = new Plane (p, v);
ac[i].p[0]=20*r.nextDouble();
ac[i].p[1]=20*r.nextDouble();
ac[i].p[2]=10*r.nextDouble();
ac[i].v[0]=100+500*r.nextDouble();
if (r.nextBoolean()) v[0] = -v[0];
ac[i].v[1]=100+500*r.nextDouble();
if (r.nextBoolean()) v[1] = -v[1];
ac[i].v[2]=40*r.nextDouble()-20;
ac[i] = new Plane (p,v);
}
collision(ac);
}
public double predictX(double t) //predicts the position(x) of plane at time t
{
double x;
x = this.p[0] + (t * v[0]);
return x;
}
public double predictY(double t) //predicts the position(y) of plane at time t
{
double y;
y = this.p[1] + (t * v[1]);
return y;
}
public double predictZ(double t) //predicts the height of plane at time t
{
double z;
z = this.p[2] + (t * v[2]);
return z;
}
public static void collision(Plane[] list)
{
double time=0;
while (time<=0.166667){//timer. 0.166667 hours = 10 minutes
for (int i=0; i<list.length; i++){
for (int j=i+1; j<list.length; j++)
{
double iX = list[i].predictX(time);
double iY = list[i].predictY(time);
double iZ = list[i].predictZ(time);
double jX = list[j].predictX(time);
double jY = list[j].predictY(time);
double jZ = list[j].predictZ(time);
if (iX==jX && iY==jY && iZ==jZ){
System.out.println("Warning to Aircraft #"+i+": collision in "+time+" seconds with Aircraft #"+j);
System.out.println("Position "+iX+", "+iY+" Altitude "+iZ);}
}
}
time+=0.000277778; //1 second
}
}
}