/// <summary> /// Get the Intelligent Driver Model from a lane, just a helper method /// </summary> /// <returns>Force based on acceleration given by IDM</returns> private Vector2 IdmAcceleration(int laneIdx) { return(IntelligentDriverModel.ComputeAccelerationIntensity( car, Path.TangentOfProjectedPosition(car.Position), LeaderVehicleInfo[laneIdx].DistToNextCar, LeaderVehicleInfo[laneIdx].ApproachingRate )); }
/// <summary> /// Apply Intelligent Driver Model based acceleration to the vehicle /// </summary> /// <returns>Acceleration given by IDM</returns> protected override Vector2 ComputeTangentialAcceleration() { Vector2 laneDir = lane.Path.TangentOfProjectedPosition(car.Position); Vector2 laneDirAcc = IntelligentDriverModel.ComputeAccelerationIntensity( car, laneDir, LeaderVehicleInfo[lane.LaneIdx].DistToNextCar, LeaderVehicleInfo[lane.LaneIdx].ApproachingRate ); Vector2 vehicleDir = Path.TangentOfProjectedPosition(car.Position); Vector2 longitudinalAcc = Vector2.Dot(laneDirAcc, vehicleDir) * vehicleDir; return(longitudinalAcc); }