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

Средства для растровой графики

Тематическое задание 10.7. Заполнение полигона общего вида Уровень сложности III. Напишите подпрограмму

short fïnPoly(IntPolyArray& poly)

которая заполняет полигон poly. Эта подпрограмма должна возвращать -1, если полигон вырожденный или неправильно сформирован или процесс закрашивания не был успешным; в остальных случаях должен быть возвращен 0. В подпрограмме следует использовать алгоритм заполнения, описанный в разделе «Заполнение полигонально-определенных областей», в котором для эффективности используются таблицы ET и списки AEL.

Полигоны для тестирования нетрудно генерировать наугад: пользователь вводит желаемое число вершин, после чего эти вершины формируются случайным образом.

Тематическое задание 10.8. Рассеивание ошибок Уровень сложности П.

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

10.12. Дополнительная литература Некоторые темы, представленные здесь, в том числе сглаживание, размытие и компоновка изображений, весьма живо обсуждаются в «Уголке Джима Блиниа» под названием «Грязные пикселы» (Jim Blinn's Corner: Dirty Pixels [Blinn, 32]). Книга Уличней «Цифровое полутонирование» (Ulichney, Digital Halftoning [Ulichney, 203]) содержит скрупулезное изложение размытия, а Кнут также обрисовывает широкие перспективы этого метода [Knuth, 124]. «Красная книга OpenGL» (OpenGL «Red Book») содержит множество подробностей на тему о том, как управлять в своих приложениях многими из тех эффектов, которые рассматривались в данной главе [Woo, 215].


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