Finch
Спокойный
Администратор
Offline
Пол:
Пролетал мимо
|
|
« Ответ #4 : 27-04-2005 12:21 » |
|
Ты можеш хотябы выбрать из твоей области для рисования все точки? Оставить только фигуры. Я применял два метода для решения таких задач. Первый. Проводиш мыслено любую линию начинаюшуеся с твоей точки и до границ области. Теперь подсчитываеш точки пересечения твоей линии с точками фигур. Если на одном плече точек пересечений будет нечетное число, значит твоя точка лежит в фигуре, если четное, значит твоя точка лежит вне фигур. Есть подводные камни у этого метода, если случайно твоя линия совпадет с ребром, или вершиной фигуры, результат будет неверен. Второй. Волновой метод. Этот метод более ресурсоемкий. Составляеш матрицу кратную по размеру с твоей областью рисования. Зануляеш матрицу. В координатах твоей точки на матрице ставиш один. Проверяеш соседей твоей точки, если там что то стоит, значит ставиш на матрице в соответствуюших координатах двойку, иначе один. И так повторяеш для каждой однерки на матрице. Естественно, координаты которые уже помечены на матрице не являются уже "соседом". Когда твоя волна столкнется с границой области рисования, значит точка не лежит ни в одной фигуре, Если ни у одной однерки не осталось соседей, но волна не столкнулась с границой, значит точка лежит внутри фигуры. Чтобы ускорить поиск для последуюших точек, в принципе результаты можно не стирать, а просто проверять на принадлежность к области. Подводные камни для обоих методов, Кривые линии могут прорисоваться с разрывами, что может привести к неверному результату.
|