int EmergenceViewer::getAccelMidiControlValue(float multiplier) { float ret = getAccel() * multiplier; ret = ofClamp(ret, getMinAccel(), getMaxAccel()); ret = ofMap(ret, getMinAccel(), getMaxAccel(), 1, 127); //printf("\nva=%f, m=%f, mina=%f, maxa=%f, retf=%f, reti=%i\n", getAccel(), multiplier, getMinAccel(), getMaxAccel(), ret, (int) ret); return (int) ret; }
SUMOReal MSCFModel_KraussPS::maxNextSpeed(SUMOReal speed, const MSVehicle* const veh) const { const SUMOReal gravity = 9.80665; const SUMOReal aMax = MAX2(0., getMaxAccel() - gravity * sin(DEG2RAD(veh->getSlope()))); // assuming drag force is proportional to the square of speed const SUMOReal vMax = sqrt(aMax / getMaxAccel()) * myType->getMaxSpeed(); return MIN2(speed + (SUMOReal) ACCEL2SPEED(aMax), vMax); }
void Actor::update(float dt ) { accel.truncate(getMaxAccel()); vel += accel * dt; vel.truncate(getMaxSpeed()); pos += vel * dt; }
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); }
double MSCFModel::maxNextSpeed(double speed, const MSVehicle* const /*veh*/) const { return MIN2(speed + (double) ACCEL2SPEED(getMaxAccel()), myType->getMaxSpeed()); }