Предположим, у вас есть список 2D-точек с назначенной им ориентацией.Пусть множество S определено следующим образом:
S={ (x,y,a) | (x,y) is a 2D point, a is an orientation (an angle) }.
Для данного элемента s из S мы будем указывать с помощью s_p точечную часть, а с s_a - угловую часть.Я хотел бы знать, существует ли эффективная структура данных, такая, что, учитывая точку запроса q, способна вернуть все элементы s в S, такие что
(dist(q_p, s_p) < threshold_1) AND (angle_diff(q_a, s_a) < threshold_2) (1)
где dist (p1, p2),с p1, p2 2D точки, это евклидово расстояние, а angle_diff (a1, a2), с углами a1, a2, это разница между углами (принимается за наименьший).Структура данных должна быть эффективной по вставке / удалению элементов и поиску, как определено выше.Число векторов может вырасти до 10.000 и более, но примите это с крошкой соли.
Теперь предположим, что изменим вышеуказанное требование: вместо использования условия (1), давайте запросим все элементыS такой, что при заданной функции расстояния d мы хотим, чтобы все элементы S были такими, что d (q, s) <порог.Если я хорошо помню, эта последняя настройка называется поиском по диапазону.Я не знаю, можно ли преобразовать первый случай во второй. </p>