|
- 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<Vehicle> vehicles;
- protected List<List<VehicleTimeRecord>> vtr_list;
- protected float trackLength;
-
- public List<Vehicle> getVehicles() {
- return vehicles;
- }
-
- public float getTrackLength() {
- return trackLength;
- }
-
- public Track(int numberVehicles, float trackLength) {
- this.trackLength = trackLength;
- this.vehicles = createVehiclesList(numberVehicles);
- this.vtr_list = new LinkedList<>();
- }
-
- protected List<Vehicle> createVehiclesList(int numberVehicles){
- List<Vehicle> result = new ArrayList<>();
- for(int i=0;i<numberVehicles;i++){
- Vehicle vehicle = new Vehicle(i, i, 5, 0.1f, this.trackLength);
- result.add(vehicle);
- }
-
- return result;
- }
-
- public void timeElapse(float timeStep) {
- for(int i=0; i<vehicles.size();i++) {
- Vehicle v = vehicles.get(i);
- int forerunnerIndex = i + 1;
- if (forerunnerIndex >= 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, timeStep);
- }
- List <VehicleTimeRecord> records = new ArrayList<>(vehicles.size());
- this.vtr_list.add(records);
- for(Vehicle v: vehicles){
- v.timeElapse(timeStep);
- VehicleTimeRecord vtr = new VehicleTimeRecord(v.id, v.position, v.curVelocity, timeStep);
- records.add(vtr);
- }
-
- this.setChanged();
- this.notifyObservers(this);
- this.clearChanged();
- }
-
- // Durchschnittsgeschwindigkeit, Anteil der Fahrzeuge unter einem bestimmten Threshold
- //
- }
|