
- •1.Форматы графических файлов. Gif, jpeg, tiff, png форматы. Растровая и векторная графика.
- •2.Цветовые модели. Rgb, cmyk, hsl, Lab. Перевод из одной модели в другую.
- •3. Тоновая коррекция в Фотошопе.
- •4. Цветовая коррекция в Фотошопе.
- •5.Средства работы с каналами и слоями в Фотошопе.
- •6. Средства работы с выделениями в Фотошопе.
- •7.Режимы наложения цветов
- •8.Типы слоёв в Фотошопе
- •9.Автоматизация операций с изображениями в Фотошопе
- •10.Сравнение принципов и интерфейсов Photoshop и CorelDraw.
- •11. Основные типы объектов CorelDraw. Инструменты для их создания, изменения и их свойства.
- •Создание эллипса
- •Создание многоугольников
- •Создание спиралей
- •Создание новых форм объектов
- •Инструменты рисования кривых Инструмент Свободная рука
- •Инструмент Кривая Безье
- •12. Алгоритм Брезенхэма
- •13.Алгоритм Брезенхема рисования окружности.
- •14. Алгоритм заполнения ограниченной области.
- •На третьем этапе в каждой строке заполняются все отрезки вида [x2i-1, x2i].
- •15.Алгоритмы трёхмерного отсечения.
- •16. Алгоритм плавающего горизонта.
- •17.Двумерные и трёхмерные преобразования тел
13.Алгоритм Брезенхема рисования окружности.
Растровые алгоритмы
Большинство графических устройств являются растровыми, представляя изображение в виде прямоугольной матрицы (сетки, целочисленной решетки) пикселей (растра), и большинство графических библиотек содержат внутри себя достаточное количество простейших растровых алгоритмов. На рис 2.1 приведена система растровых алгоритмов.
-
Алгоритмы растеризации
-
Алгоритмы перевода графических примитивов в растровую форму
-
Алгоритмы заполнения областей и многоугольников
-
-
Алгоритмы обработки растровых изображений
-
Регулировка яркости и контрастности
-
Масштабирование изображений
-
Геометрические преобразования
-
Алгоритмы фильтрации
-
Алгоритмы растеризации
Прежде чем перейдем к непосредственному рассмотрению возможности перевода математического описания объекта (линии и пр.) в растровую форму, рассмотрим понятие связности. Связность – возможность соединения двух пикселей растровой линией, т. е. последовательным набором пикселей. Возникает вопрос, когда пиксели (x1, y1) и (x2, y2) можно считать соседними. Для этого вводятся два понятия связности:
1. Четырехсвязность: пиксели считаются соседними, если либо их x-координаты, либо их y – координаты отличаются на единицу:
|x1 – x2| + |y1 – y2| ≤ 1;
2. Восьмисвязность: пиксели считаются соседними, если их x-координаты и y-координаты отличаются не более чем на единицу:
|x1 – x2| ≤ 1, |y1 – y2| ≤ 1.
На рис. 2.2 изображены четырехсвязная и восьмисвязная линии.
Рис. 2.2. Четырехсвязная и восьмисвязная линии
При переводе объектов в растровое представление существуют, алгоритмы, как использующие четырехсвязность, так использующие восьмисвязность.
Растровая развёртка окружности
Существует несколько очень простых, но не эффективных способов преобразования окружностей в растровую форму. Например, рассмотрим для простоты окружность с центром в начале координат. Ее уравнение записывается как x2 + y2 = R2. Решая это уравнение относительно y, получим
y = ±
.
Чтобы изобразить четвертую часть окружности, будем изменять x с единичным шагом от 0 до R и на каждом шаге вычислять y. Вторым простым методом растровой развертки окружности является использование вычислений x и y по формулам x = R cos α, y = R sin α при пошаговом изменении угла α от 0° до 90°.
Для упрощения алгоритма растровой развёртки стандартной окружности можно воспользоваться её симметрией относительно координатных осей и прямых y = ± x; в случае, когда центр окружности не совпадает с началом координат, эти прямые необходимо сдвинуть параллельно так, чтобы они прошли через центр окружности. Тем самым достаточно построить растровое представление для 1/8 части окружности, а все оставшиеся точки получить симметрией (см. рис. 2.5).
Рис. 2.5. Восьмисторонняя симметрия
Рассмотрим участок окружности из второго октанта x Є [0, R/]. Далее опишем алгоритм Брезенхейма для этого участка окружности.
На каждом шаге алгоритм выбирает точку Pi (xi, yi), которая является ближайшей к истинной окружности. Идея алгоритма заключается в выборе ближайшей точки при помощи управляющих переменных, значения которых можно вычислить в пошаговом режиме с использованием небольшого числа сложений, вычитаний и сдвигов.
Рассмотрим небольшой участок сетки пикселов, а также возможные способы (от A до E) прохождения истинной окружности через сетку (рис. 2.6).
Предположим, что точка Pi-1 была выбрана как ближайшая к окружности при x = xi-1. Теперь найдем, какая из точек (Si или Ti) расположена ближе к окружности при x = xi-1 + 1.
Рис. 2.6. Варианты прохождения окружности через растровую сетку
Заметим, что ошибка при выборе точки Pi (xi, yi) была равна
D(Pi) = (xi2+ yi2) – R2.
Запишем выражение для ошибок, получаемых при выборе точки Si или Ti:
D(Si) = [(xi-1+ 1)2 + (yi-1)2] – R2;
D(Ti) = [(xi-1+ 1)2 + (yi-1 – 1)2] – R2.
Если | D(Si) | ≥ | D(Ti) |, то Ti ближе к реальной окружности, иначе выбирается Si.
Введем di = | D(Si) | – | D(Ti) |.
Ti будет выбираться при di ≥ 0, в противном случае будет устанавливаться Si.
Опуская алгебраические преобразования, запишем di и di+1 для разных вариантов выбора точки Si или Ti.
D1 = 3 – 2 R.
Если выбирается Si (когда di < 0), то di+1 = di + 4 xi-1 + 6.
Если выбирается Ti (когда di ≥ 0), то di+1 = di + 4 (xi-1 – yi-1) + 10.
Существует модификация алгоритма Брезенхейма для эллипса.
procedure circle(x0,y0,r:integer);
var d,d1,d2,x,y : integer;
begin
d:=0; y:=r;
for x:=0 to round(r*sqrt(2.0)/2) do begin
d1:=d+x+x+1; d2:=d1-y-y+1;
if abs(d1) < abs(d2) then begin
d:=d1;
end
else begin
d:=d2; dec(y);
end;
put(x0+x,y0+y);put(x0+y,y0+x);put(x0-x,y0+y);put(x0+y,y0-x); put(x0+x,y0-y);put(x0-y,y0+x);put(x0-x,y0-y);put(x0-y,y0-x);
end;
end;