RUS  ENG 

Внутренности Zulu

Страницы: 1
RSS
Внутренности Zulu
 
Если не секрет, чем вы выводите графику?
(GDI/Win32API, OpenGL, DirectDraw итд)
 
GDI и иногда GdiPlus
 
Попадания мышкой в объекты соответственно регионами GDI отлавливаються:
BOOL PtInRegion(HRGN hrgn, int X, int Y);
или своя математика?
 
Нет попадание отлавливается в координатах местности. Попадание иногда нужно отлавливать и когда никакой карты нет, дл яобъектов втемную. Графика тут не причем.
 
Да это не важно в каких координатах происходит расчет в экранных или реальных.
Задача все равно сводиться к следующему:
Принадлежит ли точка P(x,y) // клик мыши
многоугольнику M с координатами вершин:
A1(x1,y1), A2(x2,y2), ... , An(xn,yn). // объект на экране
Тоесть попал юзер в объект(не обязательно видимый) или промазал.
Это один из основных вопросов машинной графики (если отвлечься от мышки).
Задача достаточно интересная с точки зрения реализации
и поразному решаемая в разных приложениях.
Векторная алгебра дает решение только для выпуклых многоугольников,
(остальные нужно сечь на выпуклые) и довольно тяжелое для вычислений.
Win32API дает готовое, универсальное решение с использованием регионов (не обязательно видимых).
Объекты регионы принадлежат GDI так как используються также для рисования и отсечения,
но могут быть использованы хоть в консольном приложении если их не прорисовывать.
 
Нет, мы не используем GDI для геометрических вычислений. Регионы в GDI имеют свои ограничения, плюс результат по различным геометрическим операциям нам нужен в векторном виде.
 
Вообще-то в определении попал-непопал ничего сложного нет. И неважно выпуклый или невыпуклый. Проводишь из заданной точки луч в любом направлении и считаешь пересечения с ребрами многоугольника. Четное - не попал, нечетное попал. Если луч пересек вершину, то там небольшой анализ, пересек или нет в зависимости от положения входящих в вершину ребер.
Можем эту функцию в объектную модель добавить.
 
Спасибо за ответ.
Функцию в объектную модель добавить не обязательно.
 
Кстати тест пересечения имеет свои ограничения и не применим для многоугольников общего вида.
Например самопересекающийся многоугольник в виде пятиконечной звезды.
Но это так к слову. Свое любопытство я удовлетворил.
 
Этот алгоритм соответствует отображению самопересекающихся полигонов в Zulu: http://politerm.com.ru/zulu/samples/image/star.gif
Страницы: 1