
- •Монохроматическое излучение?
- •Три атрибута цвета?
- •Что такое цветовой тон?
- •Основные законы колориметрии?
- •Аддитивная цветовая модель rgb?
- •Пропорции смешения цветов и их трехмерное представление?
- •Трехцветные коэффициенты смешивания rgb?
- •Недостатки и достоинства rgb?
- •Цветовая модель cmy?
- •Цветовая модель hsv?
- •Особенности монохромных моделей?
- •Компонентное кодирование цветов. Палитра?
- •Особенности цветопередачи в полиграфии?
- •Понятие дизеринга?
- •Простейший дизеринг?
- •Определение количества градаций цвета?
- •Формула цвета для двух компонент в зависимости от размера ячейки?
- •Линиатура растра?
- •Реализация дизеринга в графической системе?
- •Диагональные растры?
- •Частотная модуляция?
- •Записать в общем виде выражение аффинного преобразование координат?
- •Какие преобразования включают аффинные?
- •Записать в общем виде выражение для поворота угла ?
- •Записать в матричном виде аффинные преобразования?
- •Что такое однородные координаты?
- •Показать вид матрицы вращения в однородных координатах?
- •Показать вид матрицы растяжения-сжатия и отражения вокруг оси Оу в однородных координатах?
- •Показать вид матрицы переноса в однородных координатах?
- •Выписать в матричном виде преобразование для поворота вокруг произвольной точки на угол и указать, что означает каждая из матриц?
- •Выписать вид матриц для вращения в пространстве?
- •Указать, в чем состоит смысл проектирования?
- •Какая проекция называется ортографической?
- •Какая проекция называется аксонометрической?
- •Какая проекция называется изометрической?
- •Какая проекция называется косоугольной?
- •Какая проекция называется кабинетной?
- •Выписать матрицы проектирования вдоль координатных осей?
- •Какую информацию нужно задать для проективного преобразования пространственного объекта?
- •Привести вид матрицы проектирования для косоугольной проекции?
- •Выписать вид матрицы проектирования в однородных координатах и докажите, что она осуществляет проектирование в двумерные координаты?
- •Понятие соседей и связности?
- •Принцип работы четырехсвязного алгоритма Брезенхэма?
- •Принцип работы восьмисвязного алгоритма Брезенхэма?
- •Пример восьмисьмисвязного алгоритма?
- •Построение окружности?
- •Построение эллипса?
- •Р ис.6.4.Четверть эллипса с касательной и нормалью
- •Кривая Безье?
- •Геометрический алгоритм?
- •Задача вывода фигур?
- •Простейший алгоритм закрашивания?
- •Волновой алгоритм закрашивания?
- •Алгоритм закрашивания линиями?
- •Заполнение прямоугольника и круга?
- •Заполнение полигонов?
- •Учет вершин полигона?
- •Ускорение работы алгоритма?
- •Аналитическая модель описания поверхности?
- •Аппроксимация сплайна?
- •Кубический сплайн?
- •Векторная полигональная модель?
- •Первый способ описания структур данных в векторной модели?
- •Второй и третий способы описания структур данных в векторной модели?
- •Достоинства и недостатки векторной модели?
- •Воксельная модель?
- •Отражение света?
- •Закон Снеллиуса?
- •Диффузное преломление и отражение?
- •Распределение энергии при отражении?
- •Распределение энергии при преломлении?
- •Описание поверхности, состоящей из случайно ориентированных микрограней?
- •Преломление света поверхностью, состоящей из микрозеркал?
- •Моделирование общего случая освещенности?
- •Задача удаления невидимых линий и поверхностей?
- •Общие характеристики методов удаления невидимых линий и поверхностей?
- •Типы когерентности?
- •Линии горизонта?
- •Методы плавающего горизонта?
- •Сортировка граней по глубине?
- •Метод z-буфера?
- •Эвристические концепции невидимости?
- •Отличие и сходство видимости в сценах для выпуклых и невыпуклых фигур?
- •Постановка задачи удаления невидимых граней выпуклого многогранника?
- •Алгоритм удаления невидимых граней выпуклого многогранника?
- •Количественная невидимость?
- •Общие свойства функции количественной невидимости?
- •Свойство функции количественной невидимости в особых точках?
Волновой алгоритм закрашивания?
Волновой алгоритм закрашивания предназначен для расчета центра тяжести объектов по соответствующим изображениям. Идея была навеяна волновым алгоритмом поиска трассы на графе, известным в САПР электронных схем. Суть подобных алгоритмов состоит в том, что для начальной точки (вершины на графе) находятся соседние точки (другие вершины), которые отвечают двум условиям:
во-первых, эти вершины связаны с начальной; во-вторых, – эти вершины еще не отмечены, то есть они рассматриваются впервые. Соседние вершины текущей итерации отмечаются в массиве описания вершин, и каждая из них становится текущей точкой для поиска новых соседних вершин в следу итерации. Если в специальном массиве отмечать каждую вершину номером итерации, то когда будет достигнута конечная точка, можно совершить обратный цикл – от конечной точки к начальной по убыванию номеров итераций. В ходе обратного цикла и находятся все кратчайшие пути (если их несколько) между двумя заданными точками на графе. Подобный алгоритм можно также использовать, например, для поиска всех нужных файлов диске.
Относительно закрашивания растровых фигур, то здесь вершнами графа являются пикселы, а отметка пройденных пикселов делается прямо в растре цветом закрашивания. Как видим, это почти полностью повторяет идею предыдущего простейшего алгоритма, однако здесь мы не будем использовать рекурсию. Это обуславливает совсем другую последовательность обработки пикселов при закрашивании.
ВОЛНОВОЙ АЛГОРИТМ ЗАКРАШИВАНИЯ
numA=l;
stackA[0]. х = xst; //в массив stackA записываем
stackA[0]. у = yst; //координаты стартовой точки
numB=0; //массив stackB пока что пуст
Выполнить цикл
{
Если numA>0 то вызвать ОДИН_ШАГ(numA, numB, stackA, stackB) иначе выйти из цикла;
Если numB>0 то вызвать ОДИН_ШАГ(numB, numA, stackB, stackA) иначе выйти из цикла;
}
Определим функцию ОДИН_ШАГ(). Эта функция выполняет одну итерацию (фронт) распространения волны. При этом из массива Src[] читаются координаты пройденных точек, для каждой точки находится соседняя и записывается в массив Dest[], в котором формируется новый фронт
Фукнция ОДИН_ШАГ(numScr, numDest, Scr, Dest)
{
numDest = 0;
Выполнить цикл по i до numScr
{
x = Scr[i].x;
y = Scr[i].y;
БЛИЖНИЙ_ПИКСЕЛ(x+1, y, numDest, Dest);
БЛИЖНИЙ_ПИКСЕЛ(x-1, y, numDest, Dest);
БЛИЖНИЙ_ПИКСЕЛ(x, y+1, numDest, Dest);
БЛИЖНИЙ_ПИКСЕЛ(x, y-1, numDest, Dest);
}
}
Нам осталось определить функцию БЛИЖНИЙ_ПИКСЕЛ(). Эта функция может иметь вид:
БЛИЖНИЙ_ПИКСЕЛ(x, y, numStack, Stack)
{
Если ЦВЕТ_ПИКСЕЛ(x, y)<>0, то // закраска идет черным цветом (0)
{
ЗАКРАШИВАНИЕ(х, у, 0);
Stack[numStack].x=x;
Stack[numStack].y=y;
numStack= numStack+1;
}
}
Здесь цвет закрашивания и цвет контура – черный цвет (код 0). Пример работы алгоритма приведен на рис. 7.3.
Рис.8.3. Количество циклов для волнового
алгоритма
От начальной точки распространяется волна пикселов закрашивания в виде ромба. В одном цикле ОДИН_ШАГ() закрашиваются пикселы вдоль линии периметра ромба (или нескольких ромбов в зависимости от сложности фигуры). В качестве рабочих массивов для текущего сохранения координат пикселов фронтов волн используются динамические массивы. Максимальная емкость массивов обуславливается размерами контура и рассчитывается эмпирически.
Необходимо заметить, что этот алгоритм не является самым быстрым из известных алгоритмов закрашивания, особенно если для его реализации в качестве функции закрашивания использовать медленную функцию SetPixel для рисования отдельных пикселов: в программах для Windows. Большую скорость закрашивания обеспечивают алгоритмы, которые обрабатывают не отдельные пикселы, а сразу большие блоки из многих пикселов, которые образовывают прямоугольники или линии.