Каким образом можно разложить отрезок в растр?



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

Разложить отрезок в растр можно с помощью алгоритмов:

· Алгоритмы Брезенхема

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

Простейший способ рисования отрезка связан с ур-ем: y=kx+b , где k- угловой коэффицент ( k=(yk-yn)/(xk-xn) ) . Если шаг по x=1, то k=dY/dX сводится к k=dY, т.е.изменение Х на единицу приведет к изменению углового коэффициента на k. А если шаг по y=1, то dX=1/k.

Как повысить эффективность работы базовых алгоритмов разложения отрезка в растр?

Растр окружности (X*X+Y*Y=R*R)

Процесс можно улучшить, если вычислять одну восьмую часть окружности, а остальные семь частей отображать симметрично (в предыдущем случае Х менять от 0 до R/SQRT(2)). Но необходимый эффект можно получить только при работе с целыми числами.

Простой пошаговый алгоритм (Y=mX+b)

Алгоритм корректно работает только для отрезков в первом и восьмом ок­тандах, а в остальных случаях требует модификации. При модификации следует учесть, что при m>1,единичный шаг по Х пpиведет к такому увеличению Y, при котором две соседние точки на прямой расположатся далеко друг от друга. Поэтому X и Y следует поменять, чтобы увеличивать на единицу Y, а Х - на dX = dY/m = 1/m.

Поясните, какова идея Брезенхема и как она реализуется в базовых алгоритмах растрирования отрезков?


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

Значение исходной управляющей переменной:е=2*(y2-y1)-(x2-x1),

где x1,y1,x2,y2 - координаты начальной и конечной точек отрезка. В каждом шаге при e>=0 значение y от предыдущего увеличивается на единицу, а е уменьшается на 2*(x2-x1), в противном случае - y не меняется, а значение e увеличивается на 2*(y2-y1). В обоих случаях координата х следующего пиксела увеличивается на единицу от предыдущего значения.

Каким образом можно разложить в растр окружность? Как при этом можно использоватьгеометрические свойства данного примитива?

Существуют несколько простых способов преобразования окружности в растровую форму. Например, по формуле X*X+Y*Y=R*R для окружности с центром в начале координат. Чтобы изобразить четверть такой ок­ружности, на каждом шаге следует поменять Х от 0 до R на единицу и вычислить Y как SQRT(R*R-X*X). Остальные четверти изображают симметрично. Этот метод содержит операции умножения и извлечения корня, потому не эффективен. Кроме того, при Х близких к R, в окружности появляются заметные промежутки, так как при таких Х тангенс угла наклона касательной к окружности стремится к бесконечности.

Поясните, какова идея Брезенхема и как она реализуется в базовых алгоритмах растрирования окружности и эллипса?

Необходимо сгенерировать только одну восьмую часть окружности. Остальные ее части могут быть получены последовательными отражениями. Пусть мы только что поставили точку (xi, yi) и теперь должны сделать выбор между точками 1 (xi+1, yi-1) и 2 (xi+1, y). Алгоритм выбирает пиксел, для которого минимален квадрат расстояния между одним из этих пикселов и окружностью. Алгоритм построения окружности основан на последовательном выборе точек; в зависимости от знака контрольной величины Di выбирается следующая точка и нужным образом изменяется сама контрольная величина. Процесс начинается в точке (0, r), а первая точка имеет координаты (xc, yc+r). При x = y процесс заканчивается.

При Di<0 Di+1 [при yi+1 = yi] = Di+4xi+6.

При Di>=0 Di+1 [при yi+1 = yi-1] = Di+4(xi-yi)+10.

Расскажите, как можно закрасить сплошные области? Какие две группы алгоритмов закраски Вы знаете?

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

∙заполнение в порядке сканирования строк;

∙затравочное заполнение.

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

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


Дата добавления: 2018-04-04; просмотров: 705; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!