MCPcopy Create free account
hub / github.com/comaps/comaps / IsSpeedHigh

Method IsSpeedHigh

libs/routing/speed_camera_manager.cpp:232–263  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

230}
231
232bool SpeedCameraManager::IsSpeedHigh(double distanceToCameraMeters, double speedMpS,
233 SpeedCameraOnRoute const & camera) const
234{
235 if (camera.NoSpeed())
236 return distanceToCameraMeters < kInfluenceZoneMeters + kDistToReduceSpeedBeforeUnknownCameraM;
237
238 double const distToDangerousZone = std::abs(distanceToCameraMeters) - kInfluenceZoneMeters;
239
240 if (distToDangerousZone < 0)
241 {
242 if (distToDangerousZone < -kInfluenceZoneMeters)
243 return false;
244
245 return speedMpS > measurement_utils::KmphToMps(camera.m_maxSpeedKmH);
246 }
247
248 if (speedMpS < measurement_utils::KmphToMps(camera.m_maxSpeedKmH))
249 return false;
250
251 double timeToSlowSpeed =
252 (measurement_utils::KmphToMps(camera.m_maxSpeedKmH) - speedMpS) / kAverageAccelerationOfBraking;
253
254 // Look to: https://en.wikipedia.org/wiki/Acceleration#Uniform_acceleration
255 // S = V_0 * t + at^2 / 2, where
256 // V_0 - current speed
257 // a - kAverageAccelerationOfBraking
258 double distanceNeedsToSlowDown =
259 timeToSlowSpeed * speedMpS + (kAverageAccelerationOfBraking * timeToSlowSpeed * timeToSlowSpeed) / 2;
260 distanceNeedsToSlowDown += kTimeForDecision * speedMpS;
261
262 return distToDangerousZone < distanceNeedsToSlowDown + kDistanceEpsilonMeters;
263}
264
265bool SpeedCameraManager::SetNotificationFlags(double passedDistanceMeters, double speedMpS,
266 SpeedCameraOnRoute const & camera)

Callers

nothing calls this directly

Calls 2

KmphToMpsFunction · 0.85
NoSpeedMethod · 0.80

Tested by

no test coverage detected