Курсоваяработ а «Раскрашивание карты» по дисциплине «Структуры данных»



бет6/10
Дата23.09.2024
өлшемі0,54 Mb.
#145232
түріКурсовая
1   2   3   4   5   6   7   8   9   10
Байланысты:
Отчет Курсовая

Функция раскрашивания области


Функция Colorize() реализована на основе алгоритма, описанного в теоретических исследованиях (Алгоритм раскраски). Для начала каретка двигается влево до черной границы или границы рисунка. Позиция сохраняется. Пиксели слева направо окрашиваются в новый цвет до черной границы или границы картинки. Каретка возвращается в сохраненную позицию. Если пиксель сверху или снизу окрашен в изначальный цвет, то вызывается функция Colorize уже для этого пикселя. Таким образом реализуется рекурсия.
    1. Определение границ области


Идя от начала рисунка до конца, находится область. Сначала находится пиксель у границы. Далее начинается проход вправо. Начальный пиксель сохраняется.
Полученный пиксель окрашивается в сумму цветов области и количества областей. Далее каретка передвигается вправо, если пиксель снизу граница, то этот пиксель окрашивается. Далее каретка опять передвигается вправо до тех пор, пока справа не будет черный пиксель. Аналогичные действия повторяются с проходом наверх (граница справа), влево (граница сверху), вниз (граница слева).
Для прохода направо есть действие вниз, если справа белый пиксель, а ниже опять белый пиксель. То есть границы снизу нет. Тогда каретка будет находится на нижнем розовом пикселе (по рисунку) и следующий проход идет вниз.

Рисунок 3 – Пример алгоритма определения границы области
Смежные области определяются по алгоритму, представленному в теоретических исследованиях. Каретка в этом случае не меняется, а с помощью функции DetermineColor() определяются нужные цвета пикселей. С помощью цикла и переменной Count осуществляется проход от первого пикселя до границы или области. Если при проходе по ширине находится пиксель другого цвета, а центральный пиксель черный, то функция, определяющая смежные области возвращает черный цвет. Функции, исполняющие этот алгоритм: BottomBorder, BottomLeft, Bottom Right, BottomTop. Эти функции зеркальны или аналогичны друг другу, только проход осуществляют в сторону, указанную в названии функции.
При удалении границы осуществляется проход от первого до последнего пикселя. Если пиксель имеет цвет, больший, чем количество областей, значит этот пиксель граница. Из него вычитается количество областей и пиксель становится пикселем области. Это выполняется в функции DeleteBorder().


    1. Достарыңызбен бөлісу:
1   2   3   4   5   6   7   8   9   10




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет