Учитывая набор различных точек в двумерном пространстве и прямоугольник (координаты всех четырех точек, сторон, параллельных оси xy), как я могу быстро найти, какие точки находятся внутри прямоугольника?Быстрый алгоритм для нахождения всех точек внутри прямоугольника
Меня не интересует основное решение, проходящее через все точки и видя, какой из них находится внутри прямоугольника. Я ищу алгоритм, который даст мне быстрое время запроса на каждый прямоугольник.
Мне все равно, сколько времени я провожу на этапе предварительной обработки. Меня волнует то, что после обработки данных я получаю полезную структуру, которая дает мне быстрое время запроса на каждый прямоугольник.
Я знаю, например, я могу подсчитать, сколько точек у меня внутри прямоугольника в O (logN). Это работает, потому что я делаю много тяжелой обработки в начале, а затем каждый раз обрабатываю обработанные данные с помощью нового прямоугольника и получаю новый счет в logN time. Я ищу аналогичный алгоритм для нахождения фактических точек, а не только их счет.
повернут ли прямоугольник? Если нет, это просто простая проверка AABB: 'if (px> = rect.x && px. <= Rect.x + rect.width) {...}' – Draco18s
Посмотреть это сообщение: http://stackoverflow.com/questions/10269179/find-rectangles-that-содержать-point-efficient-algorithm – Jaco
Я не понимаю, как вы предлагаете это в LogN time. Для N очков вам, по крайней мере, придется пройти через все N точек один раз. Лучшее, что вы можете получить, это O (N). – displayName