- •Понятие машинной графики. Задачи. Основные понятия и определения.
- •2. Виды машинной графики. Растровая графика. Векторная графика. Достоинства и недостатки.
- •3. Разрешение изображения и его размер.
- •4. Основы теории цвета. Цвет в машинной графике.
- •5.Аддитивная цветовая модель rgb.
- •6. Субтрактивная цветовая модель cmyk.
- •7. Преобразование между моделями rgb и cmyk.
- •8. Цветовая модель hsb(V).
- •9. Цветовая модель Lab.
- •10. Кодирование цвета. Палитра. Индексные палитры. Фиксированная палитра. Безопасная палитра.
- •11.Алгоритмы вывода графических примитивов. Прямое вычисление координат.
- •12. Инкрементные алгоритмы. Алгоритм Брезенхэма вывода прямой линии.
- •13. Алгоритмы вывода окружности.
- •14. Алгоритмы вывода эллипса.
- •15. Методы улучшения растровых изображений: антиэлайзинг и дизеринг.
- •16. Задача графического вывода фигур. Простейший алгоритм закрашивания.
- •17. Волновой алгоритм закрашивания. Алгоритм закрашивания линиями.
- •18. Алгоритмы заполнения, использующие математическое описание контура. Заполнение прямоугольника и круга.
- •19. Алгоритмы заполнения, использующие математическое описание контура. Заполнение полигона.
- •20. Технические средства машинной графики. Классификация. Основные характеристики.
11.Алгоритмы вывода графических примитивов. Прямое вычисление координат.
Алгоритмы машинной графики можно разделить на два уровня: нижний и верхний. Группа алгоритмов нижнего уровня предназначена для реализации графических примитивов (линий, окружностей, заполнений и т.п.).
Среди алгоритмов нижнего уровня можно выделить следующие группы:
Простейшие в смысле используемых математических методов и отличающиеся простотой реализации. Такие алгоритмы не являются наилучшими по объему выполняемых вычислений или требуемым ресурсам памяти.
Поэтому можно выделить вторую группу алгоритмов, использующих более сложные математические предпосылки (но часто и эвристические) и отличающихся большей эффективностью.
К третьей группе следует отнести алгоритмы, которые могут быть без больших затруднений реализованы аппаратно (допускающие распараллеливание, рекурсивные, реализуемые в простейших командах). В эту группу могут попасть и алгоритмы, представленные в первых двух группах.
Наконец, к четвертой группе можно отнести алгоритмы со специальным назначением (например, для устранения лестничного эффекта).
Прямое вычисление координат. Пусть заданы координаты конечных точек отрезка. Координаты внутреннейточки отрезка вычисляются следующим образом:
или
Для того чтобы свести к минимуму вычисления в цикле, все операции над константами выносятся из тела цикла:
В цикле вычисляется
С учетом того, что вычисление дробей в компьютере происходит с определенной погрешностью, возможна ситуация, когда на последнем шаге цикла x окажется не равным x2. Это необходимо учитывать при использовании алгоритма.
+ Простота, ясность построения алгоритма;
+ Возможность работы с нецелыми значениями координат отрезка.
- Использование операций с дробными числами или целочисленных операций умножения и деленияобуславливает малую скорость;
- При вычислении координат путем добавления приращений может накапливаться ошибка.
12. Инкрементные алгоритмы. Алгоритм Брезенхэма вывода прямой линии.
Инкрементные алгоритмы выполняются как последовательное вычисление координат соседних пикселов путем добавления приращений координат. Приращения рассчитываются на основе анализа функции погрешности. В цикле выполняются только целочисленные операции сравнения и сложения/вычитания. Достигается повышение быстродействия для вычисления каждого пиксела по сравнению с прямым способом.
Алгоритм Брезенхэма– это алгоритм, определяющий, какие точки двумерного растра нужно закрасить, чтобы получить близкое приближение прямой линии между двумя заданными точками.
Следует выбрать, восьмисвязный или же четырёхсвязный алгоритм использовать.
Смысл алгоритма состоит в том, что мы выбираем, какую точку закрасить по соседству с той, в которой сейчас стоит перо на основании ошибки. Например, если «ошибка» по xсоставила больше 0.5, то мы прибавляем (или же вычитаем) значение xна 1, то есть перемещаем перо или влево, или вправо.
Один из вариантов алгоритма Брезенхэма:
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).