QPainterPath::intersected, Вопрос |
Здравствуйте, гость ( Вход | Регистрация )
QPainterPath::intersected, Вопрос |
Гость_styanton_* |
28.11.2010, 13:34
Сообщение
#1
|
Гости |
Передо мной стоит задача: найти точки пересечения QPainterPath и прямой. Пытался использовать метод intersected и туда передавать другой QPainterPath, в который добавлена нужная линия, но резульат - пустой путь. Пробовал closeSubpath() в линии - не помогло. Единственный вариант - добавить вторую линию, смещенную на 0.0001, но имхо это извращения. Есть ли более адекватные решения этой задачи ?
З.Ы. код:
|
|
|
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 |
|
|
Текстовая версия | Сейчас: 26.12.2024, 13:42 |