Как определить, принадлежат ли координаты одному из графиков? Здравствуйте!
Есть программа для построения графиков. Графики представляются в виде контейнера с точками (x,y) и рисуются как ломаные кривые. Стоит задача определения графика при наведении на него указателя.
Подскажите пожалуйста в общих чертах, как такое можно реализовать? В голову приходит только банальный перебор всех значений графиков при изменении положения курсора мыши, но это неэффективно, поскольку графики могут быть больше чем на 100000 точек.

21 Авг 2019 в 06:05
147 +1
2
Ответы
1

Для определения принадлежности координаты графику при наведении курсора можно использовать алгоритм пересечения луча с полигоном (Ray casting algorithm). Этот метод позволяет определить, попадает ли точка внутрь заданного многоугольника.

Как это работает:

При наведении курсора мыши на экран получаем координаты точки (x, y).Создаем луч, который начинается в этой точке и направлен вдоль оси X (или в любом другом направлении, в зависимости от ориентации графика).Проверяем пересечения этого луча с каждым сегментом (отрезком между соседними точками) графика.Если луч пересекается с нечетным числом сегментов, значит точка внутри графика, и мы можем определить, что координаты принадлежат этому графику.

Этот метод гораздо более эффективен, чем простой перебор всех точек графика, особенно при большом числе точек. Вам нужно будет реализовать алгоритм пересечения луча с отрезком и применить его к вашим графикам для определения принадлежности координаты графику.

20 Апр в 13:24
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 94 757 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир