/// <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
                ));
 }
Example #2
0
        /// <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);
        }