import java.io.IOException;
import java.util.*;
public class Treno {
public float tempopercorrenza1;
public float tempopercorrenza2;
public float diststsuccessiva;
public float diststsuccessiva2;
public float velocita_maxpiedi;
public float acceldecel;
public float spazio_decelerazione_accel;
public float tempo_acceldec;
public float cost_acc_dec;
public float piedi=5280;
public int numstaz=0;
public int d=0;
public int e=0;
public int w=0;
public Vector <Float
> distanzasuccessivatr
=new Vector <Float
>(); public Vector <Float
> distanzasuccessivatr2
=new Vector <Float
>(); public Vector <Float
> tempopercorrenzatr
=new Vector <Float
>(); public Vector <Float
> tempopercorrenzatr2
=new Vector <Float
>(); public float difftempoper;
public float tempopercor;
public float tempopercor2;
public int z;
public int f=0;
public float stazione;
public Scenario sc=new Scenario();
sc.leggiinput();
int r=0;
z=0;
int g;
Treno tr=new Treno();
cost_acc_dec=0.5f;
tempo_acceldec=(sc.velmax/sc.accelerazione);
spazio_decelerazione_accel=cost_acc_dec*(sc.accelerazione*(tempo_acceldec*tempo_acceldec));
System.
out.
println(spazio_decelerazione_accel
); while (sc.stazioni[z+1]!=null){
if(sc.stazioni[z]!=-1.0f){
calcolaittreno1();
calcolaittreno2();
if(diststsuccessiva>spazio_decelerazione_accel&&diststsuccessiva2>spazio_decelerazione_accel){
if(sc.stazioni[z+1]==0.0f){
if (tr.diststsuccessiva==tr.diststsuccessiva2&&tr.tempopercorrenza1==tr.tempopercorrenza2){
punto_incontro.addElement((sc.stazioni[z]/2)*1000);
tempo_incontro.addElement ((tempopercorrenza1-sc.tempofermata.elementAt(e))/2);
System.
out.
println(punto_incontro.
elementAt(r
)); System.
out.
println(tempo_incontro.
elementAt(r
)); d=0;
distanzasuccessivatr.clear();
distanzasuccessivatr2.clear();
tempopercorrenzatr.clear();
tempopercorrenzatr2.clear();
}
}
else{
if(sc.stazioni[z]==stazione){
g=0;
while (g<tempopercorrenzatr.size()){
tempopercor=tempopercor+tempopercorrenzatr.elementAt(g);
g++;
}
g=0;
while(g<tempopercorrenzatr2.size()){
tempopercor2=tempopercor2+tempopercorrenzatr2.elementAt(g);
g++;
}
if(sc.tempofermata.elementAt(e)>Math.abs(tempopercor-tempopercor2)){
if(tempopercor<tempopercor2){
System.
out.
println("tempopercor="+tempopercor2
); tempo_incontro.addElement(tempopercor2-sc.tempofermata.elementAt(e));
punto_incontro.addElement((sc.stazioni[z])*1000);
}
if(tempopercor>tempopercor2){
System.
out.
println("tempopercor="+tempopercor
); tempo_incontro.addElement(tempopercor-sc.tempofermata.elementAt(e));
punto_incontro.addElement((sc.stazioni[z])*1000);}
if(tempopercor==tempopercor2){
System.
out.
println("tempopercor="+tempopercor2
); tempo_incontro.addElement(tempopercor2-sc.tempofermata.elementAt(e));
punto_incontro.addElement((sc.stazioni[z])*1000);
}
}
d=0;
tempopercor=0;
tempopercor2=0;
distanzasuccessivatr.clear();
distanzasuccessivatr2.clear();
tempopercorrenzatr.clear();
tempopercorrenzatr2.clear();
}
else{
float tdiff;
float tdiffVelmax;
float sdiffVelmax;
float sdiffpercor=0;
float spaziorim;
float spaztr1=0;
float tvelmax;
float distanzatr1=0;
float distanzatr2=0;
g=0;
while(g<tempopercorrenzatr.size()){
tempopercor=tempopercor+tempopercorrenzatr.elementAt(g);
distanzatr1=distanzatr1+distanzasuccessivatr.elementAt(g);
g++;
}
g=0;
while(g<tempopercorrenzatr2.size()){
tempopercor2=tempopercor2+tempopercorrenzatr2.elementAt(g);
distanzatr2=distanzatr2+distanzasuccessivatr2.elementAt(g);
g++;
}
if (tempopercor<tempopercor2){
tdiff=tempopercor2-tempopercor;
tempopercor2=tempopercor2+cost_acc_dec;
}
else{tdiff=tempopercor-tempopercor2;
tempopercor=tempopercor+cost_acc_dec;
spaztr1=distanzatr1+spazio_decelerazione_accel;
}
if(tdiff<cost_acc_dec){
tdiffVelmax=tdiff-cost_acc_dec;
sdiffVelmax=sc.velmax*tdiffVelmax;
sdiffpercor=(sdiffVelmax+spazio_decelerazione_accel)+(sc.velmax*cost_acc_dec);
}
if(tempopercor<tempopercor2){
spaziorim=(stazione-sdiffpercor)-spaztr1;
}
else{
spaziorim=(stazione+spazio_decelerazione_accel)-(sc.stazioni[z]+sdiffpercor);
}
tvelmax=spaziorim/sc.velmax;
tempo_incontro.addElement((tempopercor+(tvelmax/2)));
punto_incontro.addElement((sc.stazioni[z]*1000)+(spaziorim/2));
}}
d=0;
tempopercor=0;
tempopercor2=0;
distanzasuccessivatr.clear();
distanzasuccessivatr2.clear();
tempopercorrenzatr.clear();
tempopercorrenzatr2.clear();
while (sc.stazioni[z]!=0.0f){
z++;
f++;}
if(sc.stazioni[z]==0.0f){z++;}
e++;
}
else{System.
out.
println("Lista terminata");} }
else {System.
out.
println("stazioni non sufficientemente lontane");} }
}
float stazionepar=0.0f;
float tempovelmax;
float s_velmax;
if (d==0){
diststsuccessiva=((sc.stazioni[z]-stazionepar)*piedi);}
if (d!=0){
diststsuccessiva
=Math.
abs((sc.
stazioni[z
]-sc.
stazioni[z
+1
])*piedi
);} System.
out.
println("la stazione successiva tr1 è"+sc.
stazioni[z
]); System.
out.
println(diststsuccessiva
); System.
out.
println(spazio_decelerazione_accel
*2
); s_velmax=diststsuccessiva-(spazio_decelerazione_accel*2);
tempovelmax=s_velmax/sc.velmax;
System.
out.
println(tempovelmax
); System.
out.
println(sc.
tempofermata.
elementAt(e
)); tempopercorrenza1=((tempo_acceldec*2)+tempovelmax)+sc.tempofermata.elementAt(e);
System.
out.
println(tempopercorrenza1
); distanzasuccessivatr.addElement(diststsuccessiva);
tempopercorrenzatr.addElement(tempopercorrenza1);
}
public void calcolaittreno2(){/**treno che parte dalla stazione periferica*/
float tempovelmax2;
float s_velmax2;
if(sc.stazioni[z+1]==0.0f){
diststsuccessiva2
=Math.
abs(sc.
stazioni[z
]*piedi
); f++;
System.
out.
println("la stazione successiva tr2 è"+sc.
stazioni[z
+1
]); }
if (sc.stazioni[z+1]!=0.0f){
while (sc.stazioni[f+1]!=0.0f){f++;}
diststsuccessiva2
=Math.
abs((sc.
stazioni[f
]-sc.
stazioni[f
-1
])*piedi
); stazione=sc.stazioni[f-1];
System.
out.
println("la stazione successiva tr2 è"+sc.
stazioni[f
-1
]);} s_velmax2
=Math.
abs(diststsuccessiva2
-(spazio_decelerazione_accel
*2
)); System.
out.
println(s_velmax2
); tempovelmax2
=Math.
abs(s_velmax2
/sc.
velmax); System.
out.
println(tempovelmax2
); System.
out.
println(sc.
tempofermata.
elementAt(e
)); tempopercorrenza2=((tempo_acceldec*2)+tempovelmax2)+sc.tempofermata.elementAt(e);
System.
out.
println(tempopercorrenza2
); distanzasuccessivatr2.addElement(diststsuccessiva2);
tempopercorrenzatr2.addElement(tempopercorrenza2);
}
}