|
|
@@ -7,8 +7,15 @@ import java.util.Observable; |
|
|
|
|
|
|
|
public class Track extends Observable { |
|
|
|
protected List<Vehicle> vehicles; |
|
|
|
protected List<List<VehicleTimeRecord>> vtr_list; |
|
|
|
protected List<List<VehicleTimeRecord>> vtrList; |
|
|
|
protected float trackLength; |
|
|
|
protected float sumAvgMemory; |
|
|
|
|
|
|
|
public float getLastAvg() { |
|
|
|
return lastAvg; |
|
|
|
} |
|
|
|
|
|
|
|
protected float lastAvg; |
|
|
|
|
|
|
|
public List<Vehicle> getVehicles() { |
|
|
|
return vehicles; |
|
|
@@ -21,7 +28,9 @@ public class Track extends Observable { |
|
|
|
public Track(int numberVehicles, float trackLength) { |
|
|
|
this.trackLength = trackLength; |
|
|
|
this.vehicles = createVehiclesList(numberVehicles); |
|
|
|
this.vtr_list = new LinkedList<>(); |
|
|
|
this.vtrList = new LinkedList<>(); |
|
|
|
this.sumAvgMemory = 0; |
|
|
|
this.lastAvg = 0; |
|
|
|
} |
|
|
|
|
|
|
|
protected List<Vehicle> createVehiclesList(int numberVehicles){ |
|
|
@@ -34,7 +43,7 @@ public class Track extends Observable { |
|
|
|
return result; |
|
|
|
} |
|
|
|
|
|
|
|
public void timeElapse(float timeStep) { |
|
|
|
public void timeElapse() { |
|
|
|
for(int i=0; i<vehicles.size();i++) { |
|
|
|
Vehicle v = vehicles.get(i); |
|
|
|
int forerunnerIndex = i + 1; |
|
|
@@ -49,15 +58,37 @@ public class Track extends Observable { |
|
|
|
v.updateVelocity(distanceForerunner); |
|
|
|
} |
|
|
|
List <VehicleTimeRecord> records = new ArrayList<>(vehicles.size()); |
|
|
|
this.vtr_list.add(records); |
|
|
|
this.vtrList.add(records); |
|
|
|
for(Vehicle v: vehicles){ |
|
|
|
v.timeElapse(50); |
|
|
|
VehicleTimeRecord vtr = new VehicleTimeRecord(v.id, v.position, v.curVelocity, timeStep); |
|
|
|
v.timeElapse(); |
|
|
|
VehicleTimeRecord vtr = new VehicleTimeRecord(v.id, v.position, v.curVelocity); |
|
|
|
records.add(vtr); |
|
|
|
} |
|
|
|
|
|
|
|
update_avg(); |
|
|
|
this.setChanged(); |
|
|
|
this.notifyObservers(this); |
|
|
|
this.clearChanged(); |
|
|
|
} |
|
|
|
|
|
|
|
public float avg_step(int step){ |
|
|
|
float sum_step = 0; |
|
|
|
for (VehicleTimeRecord r : vtrList.get(step)) { |
|
|
|
sum_step += r.velocity; |
|
|
|
} |
|
|
|
return sum_step / vehicles.size(); |
|
|
|
} |
|
|
|
|
|
|
|
protected void update_avg(){ |
|
|
|
sumAvgMemory += avg_step(vtrList.size()-1); |
|
|
|
lastAvg = sumAvgMemory / vtrList.size(); |
|
|
|
} |
|
|
|
|
|
|
|
public float avg_span(int start, int end){ |
|
|
|
float sum_span = 0; |
|
|
|
for (int i=start; i <end;i++){ |
|
|
|
sum_span += avg_step(i); |
|
|
|
} |
|
|
|
return sum_span / (end-start+1); |
|
|
|
} |
|
|
|
|
|
|
|
} |