В MongoDB лежат объекты, у которых одно из свойств — угол в градусах, целые числа от 0 до 359 (если совсем честно, то это азимут).
Мне нужно находить объекты, угол у которых отличается от заданного не более чем на 22.5 градуса. Первая версия такова:
var directionTolerance = 45 / 2;
var query = {
$or: [
{
direction: {
$gte: newDirection - directionTolerance, // newDirection -- искомый угол
$lte: newDirection + directionTolerance
}
},
{
direction: {
$gte: 360 + newDirection - directionTolerance,
$lte: 360 + newDirection + directionTolerance
}
},
{
direction: {
$gte: 360 - newDirection - directionTolerance,
$lte: 360 - newDirection + directionTolerance
}
}
]
};
К сожалению, этот запрос иногда дает false positive: например, может вернуть объект с углом 0 при угле в запросе 173.
Как сделать правильно?