本文整理汇总了C++中TIME2STEPS函数的典型用法代码示例。如果您正苦于以下问题:C++ TIME2STEPS函数的具体用法?C++ TIME2STEPS怎么用?C++ TIME2STEPS使用的例子?那么, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了TIME2STEPS函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: getStretchAreaNo
void
MSTLLogicControl::WAUTSwitchProcedure_Stretch::stretchLogic(SUMOTime step, SUMOTime startPos, SUMOTime allStretchTime) {
unsigned int currStep = myTo->getIndexFromOffset(startPos);
SUMOTime durOfPhase = myTo->getPhase(currStep).duration;
SUMOTime remainingStretchTime = allStretchTime;
SUMOTime StretchTimeOfPhase = 0;
unsigned int stretchUmlaufAnz = (unsigned int) TplConvert::_2SUMOReal(myTo->getParameterValue("StretchUmlaufAnz").c_str());
SUMOReal facSum = 0;
int areasNo = getStretchAreaNo(myTo);
for (int x = 0; x < areasNo; x++) {
StretchBereichDef def = getStretchBereichDef(myTo, x + 1);
facSum += def.fac;
}
facSum *= stretchUmlaufAnz;
//switch to startPos and stretch this phase, if there is a end of "bereich" between startpos and end of phase
SUMOTime diffToStart = getDiffToStartOfPhase(*myTo, startPos);
for (int x = 0; x < areasNo; x++) {
StretchBereichDef def = getStretchBereichDef(myTo, x + 1);
SUMOTime end = TIME2STEPS(def.end);
SUMOTime endOfPhase = (startPos + durOfPhase - diffToStart);
if (end <= endOfPhase && end >= startPos) {
SUMOReal fac = def.fac;
SUMOReal actualfac = fac / facSum;
facSum = facSum - fac;
StretchTimeOfPhase = TIME2STEPS(int(STEPS2TIME(remainingStretchTime) * actualfac + 0.5));
remainingStretchTime = allStretchTime - StretchTimeOfPhase;
}
}
if (facSum == 0) {
WRITE_WARNING("The computed factor sum in WAUT '" + myWAUT.id + "' at time '" + toString(STEPS2TIME(step)) + "' equals zero;\n assuming an error in WAUT definition.");
return;
}
durOfPhase = durOfPhase - diffToStart + StretchTimeOfPhase;
myTo->changeStepAndDuration(myControl, step, currStep, durOfPhase);
currStep = (currStep + 1) % (int)myTo->getPhases().size();
// stretch all other phases, if there is a "bereich"
while (remainingStretchTime > 0) {
for (unsigned int i = currStep; i < myTo->getPhases().size() && remainingStretchTime > 0; i++) {
durOfPhase = myTo->getPhase(i).duration;
SUMOTime beginOfPhase = myTo->getOffsetFromIndex(i);
SUMOTime endOfPhase = beginOfPhase + durOfPhase;
for (int j = 0; j < areasNo && remainingStretchTime > 0; j++) {
StretchBereichDef def = getStretchBereichDef(myTo, j + 1);
SUMOTime end = TIME2STEPS(def.end);
SUMOReal fac = def.fac;
if ((beginOfPhase <= end) && (endOfPhase >= end)) {
SUMOReal actualfac = fac / facSum;
StretchTimeOfPhase = TIME2STEPS(int(STEPS2TIME(remainingStretchTime) * actualfac + 0.5));
facSum -= fac;
durOfPhase += StretchTimeOfPhase;
remainingStretchTime -= StretchTimeOfPhase;
}
}
myTo->addOverridingDuration(durOfPhase);
}
currStep = 0;
}
}
示例2: TIME2STEPS
void
MSTLLogicControl::WAUTSwitchProcedure_Stretch::adaptLogic(SUMOTime step) {
SUMOTime gspTo = TIME2STEPS(getGSPValue(*myTo));
SUMOTime cycleTime = myTo->getDefaultCycleTime();
// the position, where the logic has to be after synchronisation
SUMOTime posAfterSyn = myTo->getPhaseIndexAtTime(step);
// calculate the difference, that has to be equalized
SUMOTime deltaToCut = 0;
if (posAfterSyn < gspTo) {
deltaToCut = posAfterSyn + cycleTime - gspTo;
} else {
deltaToCut = posAfterSyn - gspTo;
}
// test, wheter cutting of the Signalplan is possible
SUMOTime deltaPossible = 0;
int areasNo = getStretchAreaNo(myTo);
for (int i = 0; i < areasNo; i++) {
StretchBereichDef def = getStretchBereichDef(myTo, i + 1);
assert(def.end >= def.begin);
deltaPossible += TIME2STEPS(def.end - def.begin);
}
int stretchUmlaufAnz = (int) TplConvert::_2SUMOReal(myTo->getParameterValue("StretchUmlaufAnz").c_str());
deltaPossible = stretchUmlaufAnz * deltaPossible;
if ((deltaPossible > deltaToCut) && (deltaToCut < (cycleTime / 2))) {
cutLogic(step, gspTo, deltaToCut);
} else {
SUMOTime deltaToStretch = (cycleTime - deltaToCut) % cycleTime;
stretchLogic(step, gspTo, deltaToStretch);
}
}
示例3: MAX2
void
NBLoadedSUMOTLDef::patchIfCrossingsAdded() {
// XXX what to do if crossings are removed during network building?
const unsigned int size = myTLLogic->getNumLinks();
unsigned int noLinksAll = 0;
for (NBConnectionVector::const_iterator it = myControlledLinks.begin(); it != myControlledLinks.end(); it++) {
const NBConnection& c = *it;
if (c.getTLIndex() != NBConnection::InvalidTlIndex) {
noLinksAll = MAX2(noLinksAll, (unsigned int)c.getTLIndex() + 1);
}
}
int oldCrossings = 0;
// collect crossings
std::vector<NBNode::Crossing> crossings;
for (std::vector<NBNode*>::iterator i = myControlledNodes.begin(); i != myControlledNodes.end(); i++) {
const std::vector<NBNode::Crossing>& c = (*i)->getCrossings();
// set tl indices for crossings
(*i)->setCrossingTLIndices(noLinksAll);
copy(c.begin(), c.end(), std::back_inserter(crossings));
noLinksAll += (unsigned int)c.size();
oldCrossings += (*i)->numCrossingsFromSumoNet();
}
const int newCrossings = (int)crossings.size() - oldCrossings;
if (newCrossings > 0) {
const std::vector<NBTrafficLightLogic::PhaseDefinition> phases = myTLLogic->getPhases();
if (phases.size() > 0) {
if (phases.front().state.size() == noLinksAll - newCrossings) {
// patch states for the newly added crossings
// collect edges
EdgeVector fromEdges(size, 0);
EdgeVector toEdges(size, 0);
std::vector<int> fromLanes(size, 0);
collectEdgeVectors(fromEdges, toEdges, fromLanes);
const std::string crossingDefaultState(newCrossings, 'r');
// rebuild the logic (see NBOwnTLDef.cpp::myCompute)
const std::vector<NBTrafficLightLogic::PhaseDefinition> phases = myTLLogic->getPhases();
NBTrafficLightLogic* newLogic = new NBTrafficLightLogic(getID(), getProgramID(), 0, myOffset, myType);
SUMOTime brakingTime = TIME2STEPS(3);
//std::cout << "patchIfCrossingsAdded for " << getID() << " numPhases=" << phases.size() << "\n";
for (std::vector<NBTrafficLightLogic::PhaseDefinition>::const_iterator it = phases.begin(); it != phases.end(); it++) {
if ((*it).state.find_first_of("yY") != std::string::npos) {
brakingTime = MAX2(brakingTime, it->duration);
}
NBOwnTLDef::addPedestrianPhases(newLogic, it->duration, it->state + crossingDefaultState, crossings, fromEdges, toEdges);
}
NBOwnTLDef::addPedestrianScramble(newLogic, noLinksAll, TIME2STEPS(10), brakingTime, crossings, fromEdges, toEdges);
delete myTLLogic;
myTLLogic = newLogic;
} else if (phases.front().state.size() != noLinksAll) {
WRITE_WARNING("Could not patch tlLogic " + getID() + "for new crossings");
}
}
}
}
示例4: MSSimpleTrafficLightLogic
// ===========================================================================
// method definitions
// ===========================================================================
MSRailCrossing::MSRailCrossing(MSTLLogicControl& tlcontrol,
const std::string& id, const std::string& subid,
const std::map<std::string, std::string>& parameters) :
MSSimpleTrafficLightLogic(tlcontrol, id, subid, Phases(), 0, DELTA_T, parameters),
// XXX make this configurable
mySecurityGap(TIME2STEPS(15)),
myMinGreenTime(TIME2STEPS(5)),
/// XXX compute reasonable time depending on link length
myYellowTime(TIME2STEPS(5)) {
// dummy phase, used to avoid crashing in MSTrafficLightLogic::setTrafficLightSignals()
myPhases.push_back(new MSPhaseDefinition(1, 1, 1, std::string(SUMO_MAX_CONNECTIONS, 'X')));
}
示例5: ODCell
void
ODMatrix::applyCurve(const Distribution_Points& ps, ODCell* cell, std::vector<ODCell*>& newCells) {
const std::vector<double>& times = ps.getVals();
for (int i = 0; i < (int)times.size() - 1; ++i) {
ODCell* ncell = new ODCell();
ncell->begin = TIME2STEPS(times[i]);
ncell->end = TIME2STEPS(times[i + 1]);
ncell->origin = cell->origin;
ncell->destination = cell->destination;
ncell->vehicleType = cell->vehicleType;
ncell->vehicleNumber = cell->vehicleNumber * ps.getProbs()[i] / ps.getOverallProb();
newCells.push_back(ncell);
}
}
示例6: MIN2
SUMOTime
MESegment::newArrival(const MEVehicle* const v, SUMOReal newSpeed, SUMOTime currentTime) {
// since speed is only an upper bound pos may be to optimistic
const SUMOReal pos = MIN2(myLength, STEPS2TIME(currentTime - v->getLastEntryTime()) * v->getSpeed());
// traveltime may not be 0
return currentTime + MAX2(TIME2STEPS((myLength - pos) / newSpeed), SUMOTime(1));
}
示例7: switch
long
GUIParameterTracker::onCmdChangeAggregation(FXObject*,FXSelector,void*) {
int index = myAggregationInterval->getCurrentItem();
size_t aggInt = 0;
switch (index) {
case 0:
aggInt = 1;
break;
case 1:
aggInt = 60;
break;
case 2:
aggInt = 60 * 5;
break;
case 3:
aggInt = 60 * 15;
break;
case 4:
aggInt = 60 * 30;
break;
case 5:
aggInt = 60 * 60;
break;
default:
throw 1;
break;
}
TrackedVarsVector::iterator i1;
for (i1=myTracked.begin(); i1!=myTracked.end(); i1++) {
(*i1)->setAggregationSpan(TIME2STEPS(aggInt));
}
return 1;
}
示例8: MAX2
SUMOTime
MSPModel_NonInteracting::PState::computeWalkingTime(const MSEdge* prev, const MSPerson::MSPersonStage_Walking& stage, SUMOTime currentTime) {
myLastEntryTime = currentTime;
const MSEdge* edge = stage.getEdge();
const MSEdge* next = stage.getNextRouteEdge();
int dir = UNDEFINED_DIRECTION;
if (prev == 0) {
myCurrentBeginPos = stage.getDepartPos();
} else {
// default to FORWARD if not connected
dir = (edge->getToJunction() == prev->getToJunction() || edge->getToJunction() == prev->getFromJunction()) ? BACKWARD : FORWARD;
myCurrentBeginPos = dir == FORWARD ? 0 : edge->getLength();
}
if (next == 0) {
myCurrentEndPos = stage.getArrivalPos();
} else {
if (dir == UNDEFINED_DIRECTION) {
// default to FORWARD if not connected
dir = (edge->getFromJunction() == next->getFromJunction() || edge->getFromJunction() == next->getToJunction()) ? BACKWARD : FORWARD;
}
myCurrentEndPos = dir == FORWARD ? edge->getLength() : 0;
}
// ensure that a result > 0 is returned even if the walk ends immediately
myCurrentDuration = MAX2((SUMOTime)1, TIME2STEPS(fabs(myCurrentEndPos - myCurrentBeginPos) / stage.getMaxSpeed()));
//std::cout << SIMTIME << " dir=" << dir << " curBeg=" << myCurrentBeginPos << " curEnd=" << myCurrentEndPos << " speed=" << stage.getMaxSpeed() << " dur=" << myCurrentDuration << "\n";
return myCurrentDuration;
}
示例9: myName
// ===========================================================================
// method definitions
// ===========================================================================
TrackerValueDesc::TrackerValueDesc(const std::string& name,
const RGBColor& col,
SUMOTime recordBegin)
: myName(name), myActiveCol(col), myInactiveCol(col),
myMin(0), myMax(0),
myAggregationInterval(TIME2STEPS(1) / DELTA_T), myInvalidValue(-1), myValidNo(0),
myRecordingBegin(recordBegin), myTmpLastAggValue(0) {}
示例10: getPerson
void
Person::appendWalkingStage(const std::string& personID, const std::vector<std::string>& edgeIDs, double arrivalPos, double duration, double speed, const std::string& stopID) {
MSTransportable* p = getPerson(personID);
ConstMSEdgeVector edges;
try {
MSEdge::parseEdgesList(edgeIDs, edges, "<unknown>");
} catch (ProcessError& e) {
throw TraCIException(e.what());
}
if (edges.empty()) {
throw TraCIException("Empty edge list for walking stage of person '" + personID + "'.");
}
if (fabs(arrivalPos) > edges.back()->getLength()) {
throw TraCIException("Invalid arrivalPos for walking stage of person '" + personID + "'.");
}
if (arrivalPos < 0) {
arrivalPos += edges.back()->getLength();
}
if (speed < 0) {
speed = p->getVehicleType().getMaxSpeed();
}
MSStoppingPlace* bs = nullptr;
if (stopID != "") {
bs = MSNet::getInstance()->getStoppingPlace(stopID, SUMO_TAG_BUS_STOP);
if (bs == nullptr) {
throw TraCIException("Invalid stopping place id '" + stopID + "' for person: '" + personID + "'");
}
}
p->appendStage(new MSPerson::MSPersonStage_Walking(p->getID(), edges, bs, TIME2STEPS(duration), speed, p->getArrivalPos(), arrivalPos, 0));
}
示例11: OutOfBoundsException
SUMOTime
ODMatrix::parseSingleTime(const std::string& time) {
if (time.find('.') == std::string::npos) {
throw OutOfBoundsException();
}
std::string hours = time.substr(0, time.find('.'));
std::string minutes = time.substr(time.find('.') + 1);
return TIME2STEPS(TplConvert::_2int(hours.c_str()) * 3600 + TplConvert::_2int(minutes.c_str()) * 60);
}
示例12: getMaxAccel
SUMOTime
MSCFModel::getMinimalArrivalTime(double dist, double currentSpeed, double arrivalSpeed) const {
const double accel = (arrivalSpeed >= currentSpeed) ? getMaxAccel() : -getMaxDecel();
const double accelTime = (arrivalSpeed - currentSpeed) / accel;
const double accelWay = accelTime * (arrivalSpeed + currentSpeed) * 0.5;
const double nonAccelWay = MAX2(0., dist - accelWay);
// will either drive as fast as possible and decelerate as late as possible
// or accelerate as fast as possible and then hold that speed
const double nonAccelSpeed = MAX3(currentSpeed, arrivalSpeed, SUMO_const_haltingSpeed);
return TIME2STEPS(accelTime + nonAccelWay / nonAccelSpeed);
}
示例13: string2time
// ===========================================================================
// method definitions
// ===========================================================================
SUMOTime
string2time(const std::string& r) throw(EmptyData, NumberFormatException, ProcessError) {
double time;
std::istringstream buf(r);
buf >> time;
if (buf.fail()) {
throw ProcessError("Input string '" + r + "' cannot be parsed as a time");
} else {
return TIME2STEPS(time);
}
}
示例14: assert
void
MSDevice_Tripinfo::notifyMoveInternal(const SUMOVehicle& veh,
const double /* frontOnLane */,
const double timeOnLane,
const double /* meanSpeedFrontOnLane */,
const double meanSpeedVehicleOnLane,
const double /* travelledDistanceFrontOnLane */,
const double /* travelledDistanceVehicleOnLane */,
const double /* meanLengthOnLane */) {
// called by meso
const MEVehicle* mesoVeh = dynamic_cast<const MEVehicle*>(&veh);
assert(mesoVeh);
const double vmax = veh.getEdge()->getVehicleMaxSpeed(&veh);
if (vmax > 0) {
myMesoTimeLoss += TIME2STEPS(timeOnLane * (vmax - meanSpeedVehicleOnLane) / vmax);
}
myWaitingTime += veh.getWaitingTime();
myStoppingTime += TIME2STEPS(mesoVeh->getCurrentStoppingTimeSeconds());
}
示例15: getNamedFloat
void
NIImporter_VISUM::parse_TrafficLights() {
myCurrentID = NBHelpers::normalIDRepresentation(myLineParser.get("Nr"));
SUMOTime cycleTime = (SUMOTime) getNamedFloat("Umlaufzeit", "UMLZEIT");
SUMOTime intermediateTime = (SUMOTime) getNamedFloat("StdZwischenzeit", "STDZWZEIT");
bool phaseBased = myLineParser.know("PhasenBasiert")
? TplConvert::_2bool(myLineParser.get("PhasenBasiert").c_str())
: false;
SUMOTime offset = myLineParser.know("ZEITVERSATZ") ? TIME2STEPS(getNamedFloat("ZEITVERSATZ")) : 0;
// add to the list
myTLS[myCurrentID] = new NIVisumTL(myCurrentID, cycleTime, offset, intermediateTime, phaseBased);
}