|
|
|
Алгоритм заливки полигона, как искать активные ребра?
|
|||
|---|---|---|---|
|
#18+
Доброго времени суток, мне требуется коллективный разум. Суть в следующем: имеется документ с описанием нескольких алгоритмов заливки полигона http://www.fit.com.ru/Surveys/Course/Lecture_05_Part_2.doc Конкретно разбираю алгоритм построчной заливки с активными рёбрами(пункт 2.2). Для примера, я набросал простейший полигон с тремя вершинами, чтобы было попроще http://itmages.ru/image/view/2415642/8b32f19c Алгоритм по сути состоит из 2 основных этапов: Заполнить список ребёр(вернее информацией о рёбрах) и упорядочить этот список по y1, т.е по у-координате начала ребра. В цикле от верха до низа(по y координате) полигона, если достигли вершины, пересчитать список активных рёбер, далее для сканировать уже по ним(найти точки пересечения по оси х и закрасить эти промежутки линиями). Вроде как всё просто. Проблема заключается в том, что я немного не понимаю, как найти все активные рёбра для вершины. Попробую пояснить. По алгоритму(этап II), при достижении вершины полигона, т.е y_curr(тек. позиция скан.линии) = y1( у- координата начала) вершины, это ребро мы добавляем в список активных. Но фишка в том, что в этом случае, в списке акт. ребёр у нас будет всего одно ребро, а не два, как должно быть. Для приведённой картинки, это будет ребро AB, хотя, туда же должно добавиться ребро CA. Потому что, у ребра CA, точка начала, находится в вершине С, а не А, соответственно при сканировании, когда ещё «скан-линия» находится в точке А, координата(у) начала ребра CA ни как не может быть равна y_curr, ей может быть равна y-координата конца, но не начала. И так получается для любого ребра, по мере прохождения «скан-линии» сверху вниз. Почему так получается: потому что ребра рисуются по очереди, и в каждой вершине не могут быть одновременно координаты начала одного и другого ребра(вернее могут, но не в случае выпуклого многоугольника)... Наверно я что-то упускаю или не так понимаю? Растолкуйте :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2015, 07:39 |
|
||
|
|

start [/forum/topic.php?fid=16&fpage=37&tid=1341044]: |
0ms |
get settings: |
7ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
52ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
31ms |
get tp. blocked users: |
1ms |
| others: | 200ms |
| total: | 321ms |

| 0 / 0 |
