Я работаю над интерактивным веб-приложением, и сейчас я работаю над реализацией функции множественного выбора, аналогичной тому, как окна позволяют выбирать несколько значков на рабочем столе, перетаскивая прямоугольник.Проверьте, насколько эффективна точка, расположенная внутри прямоугольника, выровненного по оси, включая край?
Из-за ограничения библиотеки я, необходимой для использования, реализации этого уже стало весьма ресурсоемким:
- На начальной мыши, сохранить положение курсора мыши.
На каждом пикселе, что мыши курсор перемещается, выполните следующие действия:
- Destroy предыдущий прямоугольник выбора, если она существует, поэтому он не появляется на экране больше.
Рассчитайте ширину и высоту нового набора, используя текущую позицию курсора и текущую позицию курсора.
Создайте новый прямоугольник выделения, используя исходное положение курсора, ширину и высоту
- Показать этот прямоугольник на экране
Как вы можете видеть, есть немало все происходит каждый раз, когда курсор перемещает один пиксель. Я рассматривал это как можно больше, и я не могу сделать его более эффективным или быстрым.
Мой следующий шаг на самом деле выбирает объекты на экране, когда прямоугольник выбора перемещается по ним. Мне нужно реализовать этот алгоритм самостоятельно, поэтому у меня есть свобода сделать его максимально эффективным/быстрым. То, что мне нужно сделать, это перебрать объекты на экране и проверить каждый, чтобы увидеть, находится ли он в прямоугольнике. Таким образом, цикл здесь будет потреблять больше ресурсов. Поэтому мне нужно, чтобы проверка выполнялась максимально эффективно.
Каждый объект, который можно выбрать, может быть представлен одной точкой, P (x, y).
Как проверить, находится ли P (x, y) внутри прямоугольников, я создаю самым быстрым/наиболее эффективным способом?
Вот соответствующая информация:
- может быть произвольное количество объектов, которые могут быть выбраны на экране в любой момент времени
- Прямоугольники выбора всегда будет по оси выровнен
- Информация о прямоугольниках - это их исходная точка, их высота и ширина.
Как я могу достичь того, что мне нужно сделать как можно быстрее?
Могут ли быть перемещены или удалены объекты? – EvilTak
Да, объекты, которые можно выбрать, можно перемещать или удалять. Однако, если они удалены, они не будут повторяться при проверке, находятся ли они в прямоугольнике выделения. – JavascriptLoser