package de.hems.trafficsim; import java.util.ArrayList; import java.util.LinkedList; import java.util.List; import java.util.Observable; public class Track extends Observable { protected List vehicles; public List> getVtrList() { return vtrList; } protected List> vtrList; protected float trackLength; protected float sumAvgMemory; public float getLastAvg() { return lastAvg; } protected float lastAvg; public List getVehicles() { return vehicles; } public float getTrackLength() { return trackLength; } public Track(int numberVehicles, float trackLength) { this.trackLength = trackLength; this.vehicles = createVehiclesList(numberVehicles); this.vtrList = new LinkedList<>(); this.sumAvgMemory = 0; this.lastAvg = 0; } protected List createVehiclesList(int numberVehicles){ List result = new ArrayList<>(); for(int i=0;i= vehicles.size()) { forerunnerIndex -= vehicles.size(); } Vehicle forerunner = vehicles.get(forerunnerIndex); float distanceForerunner = forerunner.getPosition() - v.getPosition() - 1; if(distanceForerunner < 0.0){ distanceForerunner += this.trackLength; } v.updateVelocity(distanceForerunner); } List records = new ArrayList<>(vehicles.size()); this.vtrList.add(records); for(Vehicle v: vehicles){ v.timeElapse(); VehicleTimeRecord vtr = new VehicleTimeRecord(v.id, v.position, v.curVelocity, v.maxVelocity); records.add(vtr); } update_avg(); this.setChanged(); this.notifyObservers(); this.clearChanged(); // try { // Thread.sleep(125); // } catch (InterruptedException ex) { // // } } 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