Russian Qt Forum
Ноябрь 22, 2024, 19:33 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Принадлежность точки кривой  (Прочитано 6000 раз)
kibsoft
Хакер
*****
Offline Offline

Сообщений: 625


Просмотр профиля WWW
« : Август 16, 2013, 14:40 »

Существует массив контрольных точек кривой, нарисованной пользователем(рисование карандашом, как в paint и т.д.). Как можно определить, принадлежит ли конкретная точка этой кривой? Проблема в том, что кривая может иметь разную толщину. Это нужно для выделения кривой, когда пользователь кликнул по ней. Поэтому нужна довольно быстрая проверка.
Записан

http://kibsoft.ru - Download the Qt Media Encoding Library here

The apps that were written using QtMEL:
http://srecorder.com - Screen recording software
voral
Гость
« Ответ #1 : Август 16, 2013, 15:43 »

Самый быстрый, наверное, это иметь двумерный массив всей картинки. Значение каждого элемента 1 или 0. 1 линия тут есть, 0 нет. По клику просто берем значеие в соответствие с координатами.

Если объектов/линий может быть много и пересекаются. Надо такой массив на каждую "линию".

Если размер картинки может быть большой и жалко памяти - надо придумать как свести в памяти только к хранению 1.



А по цвету в вашей задаче не вариант?
Записан
kibsoft
Хакер
*****
Offline Offline

Сообщений: 625


Просмотр профиля WWW
« Ответ #2 : Август 16, 2013, 16:13 »

Нет, цвет тоже разный может быть. Решил попробовать использовать QPainterPath в качестве backend'а. А вообще рисование происходит на QML Canvas.
Записан

http://kibsoft.ru - Download the Qt Media Encoding Library here

The apps that were written using QtMEL:
http://srecorder.com - Screen recording software
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #3 : Август 16, 2013, 17:36 »

Полагается что "аналитика кривой" неизвестна.

Разбить кривую на отрезки, искать минимальное расстояние от точки до отрезка и сравнивать его с какой-то дельтой.

Оптимизация - сортируем точки по Х и с помощью lower_bound находим точку A - ближайшую к мыше. Находим расстоянме до отрезка с точкой A. Дальше просматриваем сортированный массив вперед и назад от точки A пока расстояние по X не превысит найденное.
Записан
kibsoft
Хакер
*****
Offline Offline

Сообщений: 625


Просмотр профиля WWW
« Ответ #4 : Август 16, 2013, 17:51 »

Igors, как я понял, тут не учитывается толщина линии?
Записан

http://kibsoft.ru - Download the Qt Media Encoding Library here

The apps that were written using QtMEL:
http://srecorder.com - Screen recording software
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #5 : Август 16, 2013, 18:49 »

как я понял, тут не учитывается толщина линии?
Можно учесть отняв половину ширины от найденного расстояния. Как правило юзверь не попадает точно даже в достаточно жирную линию, нужно вводить какой-то запас ("апертуру"). А мудоить с экраном/пикселями - дело тухлое
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.049 секунд. Запросов: 22.