50 myWidth(lane->getWidth()),
52 myFreeSublanes((int)myVehicles.size()),
55 myHasVehicles(false) {
83 int rightmost, leftmost;
86 for (
int sublane = rightmost; sublane <= leftmost; ++sublane) {
122 double rightVehSide =
MAX2(0., vehCenter - vehHalfWidth);
123 double leftVehSide =
MIN2(
myWidth, vehCenter + vehHalfWidth);
128 rightVehSide -= maneuverDist;
132 leftVehSide += maneuverDist;
153 assert(sublane >= 0);
162 assert(sublane >= 0);
170 std::ostringstream oss;
171 oss.setf(std::ios::fixed , std::ios::floatfield);
172 oss << std::setprecision(2);
173 for (
int i = 0; i < (int)
myVehicles.size(); ++i) {
189 for (
int i = 0; i < (int)
myVehicles.size(); ++i) {
204 myDistances(
myVehicles.size(), std::numeric_limits<double>::max()) {
230 if (sublane >= 0 && sublane < (
int)
myVehicles.size()) {
242 int rightmost, leftmost;
244 for (
int sublane = rightmost; sublane <= leftmost; ++sublane) {
268 assert(sublane >= 0);
276 std::ostringstream oss;
277 oss.setf(std::ios::fixed , std::ios::floatfield);
278 oss << std::setprecision(2);
279 for (
int i = 0; i < (int)
myVehicles.size(); ++i) {
302 myMissingGaps(
myVehicles.size(), -std::numeric_limits<double>::max()) {
315 const double missingGap = requiredGap - gap;
340 if (sublane >= 0 && sublane < (
int)
myVehicles.size()) {
360 int rightmost, leftmost;
362 for (
int sublane = rightmost; sublane <= leftmost; ++sublane) {
394 std::ostringstream oss;
395 oss.setf(std::ios::fixed , std::ios::floatfield);
396 oss << std::setprecision(2);
397 for (
int i = 0; i < (int)
myVehicles.size(); ++i) {
static double gLateralResolution
saves leader/follower vehicles and their distances relative to an ego vehicle
MSLeaderDistanceInfo(const MSLane *lane, const MSVehicle *ego, double latOffset)
Constructor.
Representation of a vehicle in the micro simulation.
virtual int addLeader(const MSVehicle *veh, bool beyond, double latOffset=0)
virtual std::string toString() const
print a debugging representation
virtual ~MSCriticalFollowerDistanceInfo()
Destructor.
int myFreeSublanes
the number of free sublanes
double getManeuverDist() const
Returns the remaining unblocked distance for the current maneuver. (only used by sublane model) ...
virtual void clear()
discard all information
static std::string getIDSecure(const T *obj, const std::string &fallBack="NULL")
get an identifier for Named-like object which may be Null
int egoRightMost
borders of the ego vehicle for filtering of free sublanes
double myWidth
the width of the lane to which this instance applies
MSAbstractLaneChangeModel & getLaneChangeModel()
std::vector< double > myDistances
virtual int addLeader(const MSVehicle *veh, double gap, double latOffset=0, int sublane=-1)
std::vector< double > myMissingGaps
const MSCFModel & getCarFollowModel() const
Returns the vehicle's car following model definition.
virtual ~MSLeaderInfo()
Destructor.
virtual void clear()
discard all information
double getActionStepLengthSecs() const
Returns the vehicle's action step length in secs, i.e. the interval between two action points...
SUMOTime getActionStepLength() const
Returns the vehicle's action step length in millisecs, i.e. the interval between two action points...
const MSVehicle * operator[](int sublane) const
return the vehicle for the given sublane
void getSubLanes(const MSVehicle *veh, double latOffset, int &rightmost, int &leftmost) const
std::string toString() const
print a debugging representation
void clear()
discard all information
virtual ~MSLeaderDistanceInfo()
Destructor.
double getMaxDecel() const
Get the vehicle type's maximal comfortable deceleration [m/s^2].
std::vector< const MSVehicle * > myVehicles
double getLateralPositionOnLane() const
Get the vehicle's lateral position on the lane.
bool hasStoppedVehicle() const
whether a stopped vehicle is leader
double getMaxSpeedLat() const
Get vehicle's maximum lateral speed [m/s].
double getWidth() const
Get the width which vehicles of this class shall have when being drawn.
virtual std::string toString() const
print a debugging representation
std::pair< const MSVehicle *, double > CLeaderDist
int addFollower(const MSVehicle *veh, const MSVehicle *ego, double gap, double latOffset=0, int sublane=-1)
const MSVehicleType & getVehicleType() const
Returns the vehicle's type definition.
void getSublaneBorders(int sublane, double latOffset, double &rightSide, double &leftSide) const
CLeaderDist operator[](int sublane) const
return the vehicle and its distance for the given sublane
double getSecureGap(const double speed, const double leaderSpeed, const double leaderMaxDecel) const
Returns the minimum gap to reserve if the leader is braking at maximum (>=0)
double getSpeed() const
Returns the vehicle's current speed.
MSLeaderInfo(const MSLane *lane, const MSVehicle *ego=0, double latOffset=0)
Constructor.
Representation of a lane in the micro simulation.
MSCriticalFollowerDistanceInfo(const MSLane *lane, const MSVehicle *ego, double latOffset)
Constructor.
double getSpeedLat() const
return the lateral speed of the current lane change maneuver