У меня есть набор из 2d точек, распределенных случайным образом. Мне нужно выполнить интенсивную операцию на небольшом подмножестве этих точек, но мне нужно сначала выяснить, какие моменты мне нужно для выполнения этой интенсивной операции. Чтобы определить, какие точки мне нужны, они должны пройти ряд геометрических критериев.
Наиболее основные критерии заключаются в том, что они находятся на определенном расстоянии от конкретной точки. Второй наиболее базовый критерий заключается в том, содержатся ли они в круговом секторе (двумерный конус), выходящем из этой конкретной точки. (Изменить: эта операция вызывается регулярно с другой конкретной точкой каждый раз, но тот же набор из 2d точек.)
Моя первоначальная мысль заключалась в том, чтобы создать сетку, содержащую 2d точек, а затем итерацию вдоль конуса, захватывающего квадраты сетки, которые он пересекает. В зависимости от размера сетки он отфильтровывает подавляющее большинство ненужных 2d точек. К сожалению, встроенная система, над которой я работаю, сильно ограничена памятью, поэтому большой (по нашим стандартам, не любой) массив 2d будет слишком интенсивным для памяти.
Я пытаюсь исследовать использование деревьев KD для ускорения вычисления, но мне не удалось найти алгоритм, связанный с секторами окружности и kd-деревьями.
Существует ли эффективный алгоритм поиска того, какие 2d-точки лежат внутри сектора круга?
Просто заметьте, что наша конкретная система медленна как по математике с плавающей запятой, так и по тригонометрии, поэтому решение, которое включает в себя меньше, превосходит тот, который требует многого.