#include "speed.hpp" #include #include static float current_speed = 0.0f; static float max_speed = 40.0f; static float accel_rate = 2.0f; static float decel_rate = 5.0f; void speed_strategy_reset() { current_speed = 0.0f; } float calc_base_speed(const TrackInfo& info) { float target = max_speed * 0.7f; // 默认中速 switch (info.scene) { case TRACK_STRAIGHT: target = max_speed; break; case TRACK_GENTLE_CURVE: target = max_speed * 0.6f; break; case TRACK_SHARP_CURVE: target = max_speed * 0.35f; break; case TRACK_LOST_LINE: target = max_speed * 0.2f; break; case TRACK_CROSS: target = max_speed * 0.5f; break; } if (std::fabs(info.deviation) > 0.6f) target *= 0.6f; float diff = target - current_speed; float rate = (diff > 0) ? accel_rate : decel_rate; current_speed += rate * (diff > 0 ? 1 : -1) * 0.01f; current_speed = std::clamp(current_speed, 0.0f, max_speed); return current_speed; }