10.11. Тематические задания требуется отработать все необходимые программистские детали для фактической работы с такими структурами:

1. Создание структуры shape (форма). Напишите подпрограмму

void pixmap2Shape(RGßpixmap& pixmap.ShapeS shape. Color3 color):

которая на основе пиксельной карты создает структуру данных shape. Структура shape должна безошибочно отображать все области внутри пиксельной карты, описанные пикселами с цветом color.

2. Создание пиксельных карт из форм.

Операция, обратная вышеописанной, осуществляет создание пиксельной карты, которая «содержит» все области, описанные формой. Напишите подпрограмму

void shape2Pixmap(Shape& shape. RGBpixmapS pixmap. Color3 fore, Color3 back):

создающую пиксельную карту достаточного размера, чтобы вместить области, описанные в shape. В пиксельной карте все пикселы внутри формы закрашиваются цветом fore, а все остальные пикселы - цветом back.

Тематическое задание 10.5. Цепное кодирование форм Уровень сложности II.

Цепное кодирование маршрутов было рассмотрено в разделе «Маршрутно-определенные области». Разработайте подходящий тип данных для хранения цепного кода, подобного приведенному на рис. 10.27, который может содержать 8-связный контур, содержащийся в пиксельной карте. Напишите подпрограмму:

void makeChain(RGBpixmap& pmap. IntPoint startPt. Chain& chain):

которая создает цепной код посредством прохождения по контуру (то есть по цепочке 8-связных пикселов одинакового цвета) внутри пиксельной карты, начиная с точки startPt. Данная подпрограмма должна работать только на допустимых маршрутах. Напишите также процедуру void drawChainPath(Chain& chn), которая рисует контур, описанный цепочкой chn.

Тематическое задание 10.6. Заполнение «горизонтально-выпуклых» полигонов Уровень сложности III.

Как говорилось в разделе «Заполнение полигонально-определенных областей», намного проще закрашивать горизонтально выпуклые полигоны, чем полигоны общего вида. Горизонтально выпуклые полигоны содержат в каждой строке развертки только одно левое и одно правое ребро, так что на ней имеется всего одна серия пикселов. AEL (active-edge list - список активных ребер) превращается в единственную пару ребер: leftActive и rightActive. ET (edge table - таблица ребер) может быть простым массивом ребер, который легко сортировать в порядке убывания ординат у концевых точек. Обновление списка AEL также упрощается, поскольку в полигоне нет никаких локальных экстремумов, а ребра никогда не пересекаются. Следовательно, нет необходимости заново сортировать список AEL после каждого обновления.


⇐ Предыдущая| |Следующая ⇒