
- •Понятие компьютерной графики. Задачи. Основные понятия и определения.
- •Основные направления машинной и компьютерной графики. Деловая графика. Основные направления компьютерной графики
- •Деловая графика
- •Виды компьютерной графики. Растровая графика. Векторная графика. Достоинства и недостатки.
- •Фрактальная графика.
- •Классы программ для работы с растровой графикой. Средства создания и обработки изображений.
- •Разрешение изображения и его размер.
- •Понятие растра. Методы растрирования
- •Rt (Rational-Tangent)-растрирование (растрирование по методу рациональных тангенсов)
- •Суперячейки
- •Растрирование по методу иррациональных тангенсов
- •Частотно-модулированное растрирование
- •Основы теории цвета. Цвет в машинной графике.
- •Основы теории цвета
- •У всех своя правда
- •Излучаемый и отражаемый свет
- •Цветное зрение
- •Метамерия цвета
- •Цветовая температура
- •Цветовая и яркостная адаптация зрения
- •Аддитивная цветовая модель rgb.
- •Числовое представление
- •Субтрактивная цветовая модель cmyk.
- •Преобразование между моделями rgb и cmyk.
- •Цветовая модель hsv.
- •Цветовая модель Lab.
- •Кодирование цвета.
- •Палитра.
- •Палитровые видеорежимы
- •Сравнение с HighColor и TrueColor
- •Индексные палитры.
- •Фиксированная палитра.
- •Безопасная палитра.
- •Алгоритмы вывода графических примитивов. Прямое вычисление координат.
- •Инкрементные алгоритмы. Алгоритм Брезенхэма вывода прямой линии.
- •Джойстики
- •Трекболл (trackball)
- •Тачпад (touchpad) и трекпоинт (trackpoint)
- •Сканеры
- •Дигитайзеры
- •Цифровая фотокамера
- •Принтеры
- •Устройства ввода. Основные характеристики.
- •Устройства ввода графической информации
- •Устройства ввода звуковой информации
- •Устройства ввода текстовой информации
- •Устройства вывода. Основные характеристики.
- •Устройства для вывода визуальной информации
- •Устройства для вывода звуковой информации
- •Устройства для вывода прочей информации
- •Основные геометрические характеристики растра.
- •Принципы формирования изображения на экране.
- •Вертикальная развертка и двойная буферизация.
- •Архитектура современных видеосистем. Видеопамять.
- •Архитектура современных видеосистем. Графический процессор.
- •Архитектура современных видеосистем. Локальная шина.
- •Графические видеорежимы. Эволюция видеоадаптеров.
- •Стандартные графические режимы:
- •Современные стандарты и интерфейсы программирования компьютерной графики.
- •Форматы графических файлов.
- •Векторные форматы
- •Растровые форматы
- •Методы 3d моделирования.
- •Поверхностный метод 3d моделирования.
- •Твердотельный тип 3d моделирования.
- •Алгоритмы вывода графических примитивов. Прямое вычисление координат. Построение линий, окружностей, эллипсов
- •Алгоритм Брезенхэма вывода окружности.
- •Фрактальная графика. Основные характеристики.
- •Программные средства для работы с фрактальной графикой.
- •Понятие фрактала. Фрактал Мандельброта.
- •Площадные фракталы
- •Фракталы на основе метода ifs
- •Свойства фракталов.
Алгоритмы вывода графических примитивов. Прямое вычисление координат. Построение линий, окружностей, эллипсов
Проще всего начертить линию можно с помощью уравнения y=ax+b. При этом результаты надо округлять до целых, поэтому прямая будет неровная.
Если наоборот, нужно соединить 2 точки с заданными координатами (х1, y1), (x2, y2), то:
a = (y2-y1) / (x2-x1); b = y1 - a*x1;
Уравнение окружности выглядит следующим образом:
x = xc + r*cos(a); y = yc + r*sin(a),
где (xc, yc) - координаты центра окружности, r - радиус, a - угол для текущей точки (x, y).
Можно строить окружность прямо по этому уравнению, задав определенный шаг по углу (a = 0..360 с шагом DA). Однако, если шаг будет слишком мал, окружность за счет округления координат будет неровная и некоторые точки будут высвечиваться по несколько раз. Обычно шаг по углу выбирается равным 1/r радиан, (чаще всего шаг изменения угла должен быть переменным для того, чтобы избежать разрывов или отсутствия изменения координат).
Можно осуществить простой алгоритм аппроксимации отрезками.
Например, координаты 6 отрезков получаются с шагом 60 градусов, затем они соединяются прямыми линиями.
Для быстрого построения используется симметрия окружности (вычисляются координаты точек только 1/8 части окружности - для сегмента от 0 до 45 градусов). Кроме того, можно уйти от операций синуса/косинуса, если выразить координаты следующей точки окружности из предыдущей (рекуррентная формула) :
x2 = xc + (x1-xc) * CA + (y1-yc) * SA;
y2 = yc + (y1-yc) * CA - (x1-xc) * SA, где
SA = sin(DA), CA = cos(DA).
Начальная точка для рекуррентной формулы: x1 = xc, y1 = yc+r.
При построении окружностей следует учитывать, что размеры пикселов по вертикали и горизонтали не совпадают (кроме VGA 640x480) и окружности будут вытягиваться в эллипсы. Для того чтобы избежать этого, нужно вводить по выравнивающие коэффициенты (которые можно определить по GetAspectRatio). Сами же эллипсы описываются уранениями:
x = xc + rx * cos(a); y = yc + ry * sin(a),
где rx, ry - полурадиусы.
Общие принципы построения для них те же, что и для окружностей.
Прямое вычисление координат. Пусть заданы координаты конечных точек отрезка. Координаты внутренней точки отрезка вычисляются следующим образом:
x=f(y): x=x1+(y-y1)(x2-x1)/(y2-y1)
или
y=F(x): y=y1+(x-x1)(y2-y1)/(x2-x1).
В зависимости от угла наклона прямой выполняется цикл по оси x (если |x2-x1|>|y2-y1|) или по оси y (в противном случае).
Для того чтобы свести к минимуму вычисления в цикле, все операции над константами выносятся из тела цикла:
k=(y2-y1)/(x2-x1), yy=y1-x1*k.
В цикле вычисляется y=yy+x*k.
Если учесть, что вычисления выполняются как итеративный процесс, где x на каждом шаге увеличивается на единицу, то вычисления в данном алгоритме еще более упрощаются:
k=(y2-y1)/(x2-x1), y=y1.
Для x от x1 до x2 с шагом 1 вычисляется y=y+k.
С учетом того, что вычисление дробей в компьютере происходит с определенной погрешностью, возможно ситуация, когда на последнем шаге цикла x окажется не равным x2. Это необходимо учитывать при использовании алгоритма.
Положительные черты алгоритма прямого вычисления координат:
· простота, ясность построения алгоритма;
· возможность работы с нецелыми значениями координат отрезка.
Недостатки:
· использование операций с дробными числами или целочисленных операций умножения и деления обуславливает малую скорость;
· при вычислении координат путем добавления приращений может накапливаться ошибка.
Инкрементные алгоритмы. Алгоритм Брезенхэма вывода прямой линии.
Брезенхэм предложил подход, позволяющий разрабатывать так называемые инкрементные алгоритмы растеризации. Основной целью разработки таких алгоритмов было построение циклов вычисления координат на основе только целочисленных операций сложения/вычитания без использования умножения и деления. Уже известны инкрементные алгоритмы не только для отрезков прямых, но и для кривых линий.
Инкрементные алгоритмы выполняются как последовательное вычисление координат соседних пикселов путем добавления приращений координат. Приращения рассчитываются на основе анализа функции погрешности. В цикле выполняются только целочисленные операции сравнения и сложения/вычитания. Достигается повышение быстродействия для вычисления каждого пиксела по сравнению с прямым способом.
Один из вариантов алгоритма Брезенхэма xerr:=0; yerr:=0; dx:=x2-x1; dy:=y2-y1; Если dx>0, то incX:=1; dx=0, то incX:=0; dx<0, то incX:=-1; Если dy>0, то incY:=1; dy=0, то incY:=0; dy<0, то incY:=-1; dx:=|dx|; dy:=|dy|; Если dx>dy, то d:=dx иначе d:=dy; x:=x1; y:=y1; Закрасить пиксел с координатами (x, y); Выполнить d раз цикл: xerr:=xerr+dx; yerr:=yerr+dy; Если xerr>=d, то xerr:=xerr-d, x:=x+incX; Если yerr>=d, то yerr:=yerr-d, y:=y+incY; Закрасить пиксел с координатами (x, y).