Базовые растровые алгоритмы реферат

Обновлено: 02.07.2024

Пусть заданы координаты (x1,y1) и (x2,y2) концов отрезка прямой линии. Для вывода линии необходимо закрасить в определенный цвет все пикселы вдоль линии. Для того чтобы закрасить каждый пиксел, необходимо знать его координаты.

Наиболее просто нарисовать отрезок горизонтальной линии (y1=y2): для x от x1 до x2 с шагом 1 закрашиваются соседние пикселы (x, y1). (Эта операция достаточно проста и применяется в алгоритмах закрашивания полигонов.)

Аналогично изображается отрезок вертикальной линии.

Горизонтали и вертикали представляют собой частный случай линий. Рассмотрим линию общего вида. Известно несколько методов расчета координат точек линии.

Прямое вычисление координат. Пусть заданы координаты конечных точек отрезка. Координаты внутренней точки отрезка вычисляются следующим образом:

Рекомендуемые материалы

В зависимости от угла наклона прямой выполняется цикл по оси x (если |x2-x1|>|y2-y1|) или по оси y (в противном случае).

Для того чтобы свести к минимуму вычисления в цикле, все операции над константами выносятся из тела цикла:

В цикле вычисляется y=yy+x*k.

Если учесть, что вычисления выполняются как итеративный процесс, где x на каждом шаге увеличивается на единицу, то вычисления в данном алгоритме еще более упрощаются:

Для x от x1 до x2 с шагом 1 вычисляется y=y+k.

С учетом того, что вычисление дробей в компьютере происходит с определенной погрешностью, возможно ситуация, когда на последнем шаге цикла x окажется не равным x2. Это необходимо учитывать при использовании алгоритма.

Положительные черты алгоритма прямого вычисления координат:

· простота, ясность построения алгоритма;

· возможность работы с нецелыми значениями координат отрезка.

· использование операций с дробными числами или целочисленных операций умножения и деления обуславливает малую скорость;

· при вычислении координат путем добавления приращений может накапливаться ошибка.

Брезенхэм предложил подход, позволяющий разрабатывать так называемые инкрементные алгоритмы растеризации. Основной целью разработки таких алгоритмов было построение циклов вычисления координат на основе только целочисленных операций сложения/вычитания без использования умножения и деления. Уже известны инкрементные алгоритмы не только для отрезков прямых, но и для кривых линий.

Инкрементные алгоритмы выполняются как последовательное вычисление координат соседних пикселов путем добавления приращений координат. Приращения рассчитываются на основе анализа функции погрешности. В цикле выполняются только целочисленные операции сравнения и сложения/вычитания. Достигается повышение быстродействия для вычисления каждого пиксела по сравнению с прямым способом.

Один из вариантов алгоритма Брезенхэма ([12, с. 100-101]):

Если dx>0, то incX:=1;

dy dy, то d:=dx иначе d:=dy;

Закрасить пиксел с координатами (x, y);

Выполнить d раз цикл:

Если xerr>=d, то xerr:=xerr-d, x:=x+incX;

Если yerr>=d, то yerr:=yerr-d, y:=y+incY;

Закрасить пиксел с координатами (x, y).

Рассмотрим пример работы приведенного выше алгоритма Брезенхэма для отрезка (2;3) - (8;6). Этот алгоритм восьмисвязный, т.е. при вычислении приращений координат для перехода к соседнему пикселу возможны восемь случаев:


incY=-1

Известны также четырехсвязные алгоритмы. Они более просты, но генерируют менее качественное изображение линий за большее количество тактов работы. Для приведенного примера четырехсвязный алгоритм работает 10 тактов, а восьмисвязный - только 7:


incY=-1


Растром называется прямоугольная сетка точек, формирующих изображение на экране компьютера. Каждая точка растра характеризуется двумя параметрами: своим положением на экране исвоим цветом, если монитор цветной, или степенью яркости, если монитор черно-белый. Таким образом, растровые изображения представляют собой множество дискретных точек (пикселов). Поэтому и для работы с такими изображениями необходимы специальные алгоритмы.

Термин “пиксел” образован от английского pixel (picture element - элемент изображения. Существенно, что пикселы имеют целочисленные координаты.К базовым алгоритмам растровой графики (алгоритмам нижнего уровня) относят:

- Алгоритмы Брезенхейма для вывода прямой линии, окружности, эллипса.

- Алгоритмы закрашивания (простейший алгоритм закрашивания, волновой алгоритм, алгоритм закрашивания линиями), заполнение прямоугольников, круга.

- Алгоритмы вывода толстой и пунктирной линии.

- Алгоритм построения кривых Безье.

Базовымиэти алгоритмы считаются потому, что используют простейшие математические методы и как правило, имеют аппаратную реализацию.

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

Для горизонтальных, вертикальных и наклоненных под углом 45° отрезков выбор растровых элементов очевиден (рисунок 1а). При любой другой ориентации выбрать нужные пикселы труднее (рисунок 1 б) и поэтому возможны разные варианты растрового представленияфигуры (рисунок 1 в).


Рисунок 1. Разложение в растр отрезков прямых

Важным понятием для растровой сетки являетсясвязность (когерентность) - возможность соединения двух пикселов растровой линией, т.е. последовательным набором соседних пикселов.

Вводится два понятия связности:


• Четырехсвязность: пикселы (X1,Y1) и (Х2,У2) считаются соседними, если либо их X-координаты, либо их Y-координаты отличаются на единицу:


Иными словами, одновременно должны выполняться условия Dx=0, Dy≤1 или Dx≤1, Dy=0.• Восьмисвязность: пикселы считаются соседними, если их X-координаты и Y-координаты отличаются не более чем на единицу:


Рисунок 2. Понятие связности

Общие требования к алгоритмам вычерчивания отрезков следующие:

-Отрезки должны выглядеть прямыми,

- Отрезки должны начинаться и заканчиваться в заданных точках,

- яркость вдоль отрезка должна быть постоянной и не зависеть от длины и наклона,

- Алгоритм рисования линий должен быть быстрым.

Постоянная яркость вдоль отрезка достигается лишь при проведении горизонтальных, вертикальных и наклоненных под углом.

Поскольку экран растрового дисплея с электронно-лучевой трубкой (ЭЛТ) можно рассматривать как матрицу дискретных элементов (пикселов), каждый из которых может быть подсвечен, нельзя непосредственно провести отрезок из одной точки в другую. Процесс определения пикселов, наилучшим образом аппроксимирующих заданный отрезок, называется разложением в растр. В сочетании с процессом построчной визуализации изображения он известен как преобразование растровой развертки. Для горизонтальных, вертикальных и наклоненных под углом 45°. отрезков выбор растровых элементов очевиден. При любой другой ориентации выбрать нужные пикселы труднее, что показано на рис.1.




Рис.8.1. Разложение в растр отрезков прямых.

Общие требования к алгоритмам вычерчивания отрезков следующие: Отрезки должны выглядеть прямыми, начинаться и заканчиваться в заданных точках, яркость вдоль отрезка должна быть постоянной и не зависеть от длины и наклона, рисовать нужно быстро.

Постоянная вдоль всего отрезка яркость достигается лишь при проведении горизонтальных, вертикальных и наклоненных под углом 45° прямых. Для всех других ориентаций разложение в растр приведет к неравномерности яркости, как это показано на рис. 1.

В большинстве алгоритмов вычерчивания отрезков для упрощения вычислений используется пошаговый алгоритм. Приведем пример подобного алгоритма:

Простой пошаговый алгоритм

1. if позиция - конец конец then 2


Рис. 8.2. Основная идея алгоритма Брезенхема.

Не все отрезки проходят через точки растра. Подобная ситуация иллюстрируется рис.3.2, где отрезок с тангенсом угла наклона 3/8 сначала походит через точку растра (0,0) и последовательно пересекает три пиксела. Также иллюстрируется вычисление ошибки при представлении отрезка дискретными пикселами.


Рис.8.3. График ошибки в алгоритме Брезенхема.

Так как желательно проверять только знак ошибки, то она первоначально устанавливается равной -1/2. Таким образом, если угловой коэффициент отрезка больше или равен 1/2, то величина ошибки в следующей точке растра с координатами (1,0) может быть вычислена как

где m - угловой коэффициент. В нашем случае при начальном значении ошибки -1/2

Так как е отрицательно, отрезок пройдет ниже середины пиксела. Следовательно, пиксел на том же самом горизонтальном уровне лучше аппроксимирует положение отрезка, поэтому у не увеличивается. Аналогично вычисляем ошибку

в следующей точке растра (2,0). Теперь е положительно, значит отрезок пройдет выше средней точки. Растровый элемент (2,1) со следующей по величине координатой у лучше аппроксимирует положение отрезка. Следовательно у увеличивается на 1. Прежде чем рассматривать следующий пиксел, необходимо откорректировать ошибку вычитанием из нее 1. Имеем

Заметим, что пересечение вертикальной прямой x = 2 с заданным отрезком лежит на 1/4 ниже прямой у = 1. Еслиже перенести отрезок 1/2 вниз, мы получим как раз величину -3/4. Продолжение вычислений для следующего пиксела дает

Так как е отрицательно, то у не увеличивается. Из всего сказанного следует, что ошибка - это интервал, отсекаемый по оси у рассматриваемым отрезком в каждом растровом элементе (относительно -1/2).

Приведем алгоритм Брезенхема для первого октанта, т.е. для случая 0 = 0 )

Блок-схема алгоритма приводится на рис.8.4. Пример приведен ниже.


Рис8.4. Блок-схема алгоритма Брезенхема.

Пример 8.1. Алгоритм Брезенхема.

Рассмотрим отрезок проведенный из точки (0,0) в точку (5,5). Разложение отрезка в растр по алгоритму Брезенхема приводит к такому результату:

С появлением растровых дисплеев для обработки и отображения графики на компьютере необходимо разработать набор алгоритмов, совместимых с ним: алгоритмы растровой графики.

Алгоритм преобразования сканирования для сегмента прямой линии

Математически на прямой бесконечно много точек. Но чтобы представить эту прямую линию на экране растрового монитора компьютера, используйте конечные точки для представления бесконечных точек.


Чтобы использовать эти дискретные пиксели для аппроксимации линии на растровом дисплее, необходимо знать координаты x, y этих пикселей.
Знайте координаты P0 и P1, а затем используйте уравнение прямой линии, чтобы найти координаты других точек.
Найдите уравнения прямой линии для P0 и P1: y = kx + b (уравнение угла наклона, k - наклон, точка пересечения b)
k=(y1-y0)/(x1-x0) (x1!=x0)
Есть только одно уравнение, но есть два неизвестных, поэтому сначала предположите одно. Предполагая, что x известен, то есть начиная с начальной точки x0 x и продвигаясь на один пиксель в направлении x (not long = 1), может быть вычислено соответствующее значение y. Поскольку координаты пикселей являются целыми числами, значение y необходимо округлить.

Как отсканировать целую точку в пиксель экрана?
Например, P (1,7,0,8) округляется до P (1,0), но 1,7 ближе к 2, а 1 из 0,8 ближе. Если вы округлите эти два числа до ( 1,0) Ошибка большая, поэтому ее обычно округляют до (2,1), что ближе к фактическому

Прямые линии - это самая простая графика. Для анимации или реалистичной графики часто требуются тысячи программ для рисования линий. Поэтому качество и эффективность алгоритма прямой линии напрямую влияют на качество и скорость отображения графики.

Три известных распространенных алгоритма рисования прямых линий

Использование уравнения y = kx + b для рисования линии требует умножения и сложения. Мы все знаем, что компьютер выполняет операции сложения быстрее всех, поэтому мы заменим его на операции сложения.

Метод DDA (цифровой дифференциальный анализатор)


Представьте очень важную идею в графическом мышлении.

точка (xi+1,yi+1) Удовлетворяет yi+1=kxi+1+ b - уравнение. Как упоминалось ранее, пиксель увеличивается на 1, поэтому yi+1=kxi+1+b=k(xi+1)+b=kxi+k+b=yi+ k, поэтому yi+1=yi+ k, значение этой формулы таково: значение y текущего шага равно значению y предыдущего шага плюс наклон k, что превращает исходное умножение и сложение в сложение! Это значительно повышает эффективность.

Рисование линии средней точки


Здесь используется общее уравнение прямой: F (x, y) = 0; Ax + By + C = 0

Прямая линия делит плоскость на три части.

Делайте один шаг в направлении максимального смещения каждый раз, и идти или не идти в другом направлении не зависит от оценки члена ошибки средней точки.
Предположим: 0 0,5, это близко к верхней точке, в противном случае близко к нижней точке.

Начальное значение члена ошибки d d0=0
d=d+k
Как только d> = 1, вычтите из него 1, чтобы обеспечить относительность d и от 0 до 1.

Как повысить эффективность этого алгоритма сложения целых чисел?
Улучшение 1:Пусть e = d-0.5
e> 0, направление y увеличивается на 1; e

Интеллектуальная рекомендация


Я не пойду домой в этом году, но я хочу сказать вам эти слова

Праздник весны - это смысл и продолжение дома. Репортер новостей Китая Ли Пэйюнь Независимо от того, где на пути вперед семья всегда будет самой сильной поддержкой. China News репортер Чжай Лу фото То.


6,2 млн. Маккоинов вступили в строку 30 раз, посмотрите, как токена макета McDonald's

Эта статья от Wechat Public AccountDappVisionОригинальный запуск, перепечаток, пожалуйста, свяжитесь с авторизацией Вчера монеты McDonald's Maccoin были на линии. Чтобы ознамерить 50-летие рождения ги.


jQuery Great Plugin

HTML: js: Quote JS Class: Рендеринг.

[Регулировка кода диссертации] сверточная нейронная сеть для моделирования предложений

Эта бумага использует динамическое объединение K-MAX и широкий том усиливает точность моделирования предложений, в NLP, когда длина свертки относительно велика, длина входного вектора относительно вел.

Идеальное решение для клавиатуры на стороне iOS блокирует поле ввода, то есть позиция поле ввода увеличивается по мере роста клавиатуры

Я верю, что все будут писать мобильный телефон и столкнулись с проблемой, что входное поле заблокировано клавиатурой мобильного телефона. У меня много способов, и я начал менять фиксированное позицион.

Читайте также: