У меня есть большое количество 2D точек, и я хочу быстро получить те, которые лежат в определенном прямоугольнике.
Давайте скажем «.» это любая точка, а «X» - это точка, которую я хочу найти внутри прямоугольника, в котором «T» обозначает TopLeft, а «B» - BottomRight:
. . . . . .
. T-----+ .
. | X X | .
. +-----B .
. . . . . .
Я попробовал std :: set с функтором сортировки, который сортирует точку TopLeft в начале и BottomRight в конце набора. Если сначала выполнить сортировку по значению X, это приведет к обнаружению следующих точек.
. . . . . .
. T-----+ .
X | X X | X
. +-----B .
. . . . . .
Это означает, что мне придется проверять каждую найденную точку, действительно ли она находится внутри прямоугольника. Не очень хорошо.
Что может быть лучше для этого?
Мой язык - C ++ (Windows), и у меня есть STL и усиление.
Обновление
Прочитав ответы до сих пор, я заметил, что не учел все параметры своей задачи: нет ни одного фиксированного прямоугольника.
Прямоугольники могут быть установлены пользователем во время выполнения. Это означает, что сортировка набора точек обещает быть более эффективной, чем линейный поиск по всем точкам, как было предложено Артелием до этого обновления.
Я все еще попробую, хотя! Я не ожидаю, что пользователь установит прямоугольник очень часто. Что касается усилий по внедрению, это может оказаться хорошим решением для меня.