crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> QPainterPath::intersected, Вопрос
Гость_styanton_*
сообщение 28.11.2010, 13:34
Сообщение #1





Гости








    


Передо мной стоит задача: найти точки пересечения QPainterPath и прямой. Пытался использовать метод intersected и туда передавать другой QPainterPath, в который добавлена нужная линия, но резульат - пустой путь. Пробовал closeSubpath() в линии - не помогло. Единственный вариант - добавить вторую линию, смещенную на 0.0001, но имхо это извращения. Есть ли более адекватные решения этой задачи ?

З.Ы. код:
QPainterPath rect;
rect.addrect(0,0,100,100);
QPainterPath line;
line.moveTo(-10,-10);
line.lineTo(110,110);
rect.intersects(line);   // Возвращает true
rect.intersected(line); //! В итоге - пустой путь
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Obey-Kun
  опции профиля:
сообщение 1.12.2010, 6:28
Сообщение #2


Студент
*

Группа: Участник
Сообщений: 96
Регистрация: 24.3.2010
Пользователь №: 1556

Спасибо сказали: 3 раз(а)




Репутация:   0  


Это нормальное поведение — отрезок пересекает painterpath, но результатом пересечения является отрезок, который при автоматически производимой симплификации удаляется. Ведь при замыкании painterpath'а, состоящего из одной линии, получается фигура с нулевой площадью, а такие painterpath удаляет (хотя я могу и ошибаться, но по моему опыту так и есть... если не прав — поправьте).

Удаление фигур с нулевой площадью — это логично в большинстве случаев. Представь два квадрата 1x1. Верхний левый угол одного из них лежит в точке (0; 0), другого — в (0; 1). Таким образом, у них общая грань. Так как PainterPath — площадная сущность, то она будет считать, что в результате их пересечения получится пустота. Так-то.

Можно разбить painterpath на subpath polygons, и перебрать все отрезки получившихся полигонов на предмет пересечения с твоим отрезком. Математика нахождения точки пересечения двух отрезков очень простая. Не забудь в конце удалить повторяющиеся результаты, ведь если отрезок пересекает излом полигона, то с ним пересекаются 2 отрезка.

Сообщение отредактировал Obey-Kun - 1.12.2010, 6:32
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 29.3.2024, 3:16