Dla dwóch liczb porównuje się odległość między nimi. Dla kątów trzeba również sprawdzić czy odległość w drugim kierunku jest mniejsza.
| 230 - 20 | = 210
360 - 230 + 20 = 150
| 120 - 20 | = 100
| 360 - 120 + 20| = 260
| 340 - 20 | = 320
360 - 340 + 20 = 40 <-- mniejsza odległość
Przykładowy kod:
#include <iostream>
#include <cmath>
#include <vector>
#include <functional>
#include <algorithm>
int angle_distance(int angle1, int angle2) {
if (angle1 < angle2)
std::swap(angle1, angle2);
return std::min(
angle1 - angle2,
360 - angle1 + angle2
);
}
int main() {
std::vector<int> angles{ 230, 120, 340 };
int angle = 20;
auto near = *std::ranges::min_element(angles, {},
std::bind(angle_distance, std::placeholders::_1, angle));
std::cout << "Near angle: " << near << "\n";
}