Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Конспект лекций по КГ.pdf
Скачиваний:
81
Добавлен:
11.05.2015
Размер:
2.2 Mб
Скачать

Данный алгоритм строит восьмисвязные отрезки.

Четырёхсвязные алгоритм проще и универсальнее(он может генерировать линию при любом тангенсе наклона). Но изображение четырёхсвязной линии более грубое.

4.3.3. Алгоритмы рисования окружности

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

Один из наиболее простых и эффективных алгоритмов генерации окружности разработан Брезенхемом.

Для простоты и без ограничения общности рассмотрим генерацию1/8 окружности, центр которой лежит в начале координат. Остальные части окружности могут быть получены последовательными отражениями(использованием симметрии точек на окружности относительно центра и осей координат).

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

X 2 +Y 2 = R2 .

Алгоритм Брезенхема пошагово генерирует очередные точки окружности, выбирая на каждом шаге для занесения пиксела точку растраPi ( X i ,Yi ) , бли-

жайшую к истинной окружности, так чтобы ошибка:

E (P ) = ( X 2

+Y 2 ) - R2

(18)

i i

 

 

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

Рассмотрим генерацию 1/8 окружности по часовой стрелке, начиная от точки X = 0,Y = R .

Проанализируем возможные варианты занесения i +1–ой точки, после занесения i –ой.

65

Рисунок 30 – Варианты расположения очередного пиксела окружности

При генерации окружности по часовой стрелке после занесения точки ( X i ,Yi ) следующая точка может быть либо Pg = ( X i+1 ,Yi ) – перемещение по го-

ризонтали, либо Pd = ( X i+1 ,Yi-1 ) – перемещение по диагонали, либо Pv = ( X i ,Yi-1 )

– перемещение по вертикали.

Для этих возможных точек вычислим и сравним абсолютные значения разностей квадратов расстояний от центра окружности до точки и окружности:

Dg

 

=

 

 

 

( X +1)2 + Y 2 - R2

,

 

 

 

D

 

=

 

 

 

( X +1)2 + (Y -1)2 - R2

 

,

(19)

 

 

 

 

d

 

 

 

 

 

 

 

 

 

 

 

 

D

 

 

 

=

 

X 2 + (Y -1)2 - R2

 

.

 

 

 

 

 

 

 

 

 

 

v

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Выбирается и заносится та точка, для которой это значение минимально. Выбор способа расчета определяется по значениюDd . Если Dd < 0 , то

диагональная точка внутри окружности. Это варианты 1–3. Если Dd > 0 , то диа-

гональная точка вне окружности. Это варианты 5–7. И, наконец, если Dd = 0 , то диагональная точка лежит точно на окружности. Это варианты 4. Рассмотрим случаи различных значений Dd в только что приведенной последовательности.

Случай Dd < 0

Здесь в качестве следующего пиксела могут быть выбраны или горизон-

тальный – Pg или диагональный – Pd .

 

 

 

 

 

 

 

Для определения

 

того,

какой пиксел

выбрать Pg или Pd составим раз-

ность:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

d

i

=

 

D

g

 

-

 

D

 

=

 

( X +1)2 + Y 2

- R2

 

-

 

( X +1)2 + (Y -1)2 - R2

 

. (20)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

d

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

66

И будем выбирать точку Pg

при di < 0 , в противном случае выберем Pd .

Рассмотрим вычисление di

для разных вариантов.

 

 

Для вариантов 2 и 3:

 

 

 

 

Dg > 0 и Dd < 0 , так как горизонтальный пиксел либо вне, либо на окруж-

ности, а диагональный внутри.

 

 

 

 

di = ( X +1)2 +Y 2 - R2 + ( X +1)2 + (Y -1)2 - R2 .

(21)

Добавив и вычтя (Y -1)2 получим:

 

 

di

= 2[( X +1)2 + (Y -1)2 - R2 ]+ 2Y -1.

(22)

В квадратных скобках стоит Dd , так что

 

 

 

di = 2(Dd +Y ) -1.

 

(23)

Для варианта 1:

 

 

 

 

Ясно, что должен быть выбран горизонтальный пиксел Pg . Проверка ком-

понент di показывает, что Dg < 0 и Dd

< 0 , причем di < 0 ,

так как диагональная

точка больше удалена от окружности,

т.е. по критерию di

< 0 как и в предыду-

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

Случай Dd > 0 .

Здесь в качестве следующего пиксела могут быть выбраны или диагональный – Pd или вертикальный – Pv .

Для определения того, какую пиксел выбрать Pd или Pv составим раз-

ность:

s

i

=

D

-

D

=

( X +1)2

+ (Y -1)2 - R2

-

X 2 + (Y -1)2 - R2

.

(24)

 

 

d

 

v

 

 

 

 

 

 

 

Если si < 0 , то расстояние до вертикальной точки больше и надо выбирать

диагональный пиксел Pd , если же si

> 0 , то выбираем вертикальный пиксел Pv .

Рассмотрим вычисление si для разных вариантов.

 

Для вариантов 5 и 6:

67

Dd > 0 и Dv < 0 , так как диагональный пиксел вне, а вертикальный либо

вне либо на окружности.

 

si = ( X +1)2 + (Y -1)2 - R2 + X 2 + (Y -1)2 - R2 .

(25)

Добавив и вычтя ( X +1)2 получим:

 

si = 2[( X +1)2 + (Y -1)2 - R2 ]- 2 X -1.

(26)

В квадратных скобках стоит Dd , так что

 

si = 2(Dd - X ) -1.

(27)

Для варианта 7:

Ясно, что должен быть выбран вертикальный пиксел Pv . Проверка компо-

нент si показывает, что Dd > 0 и Dv > 0 , причем si > 0 , так как диагональная точка больше удалена от окружности, т.е. по критерию si > 0 как и в предыду-

щих случаях следует выбрать вертикальный пиксел Pv , что соответствует выбо-

ру для вариантов 5 и 6.

Случай Dd = 0 .

 

 

 

 

 

Для компонент di имеем: Dg > 0 и

Dd = 0 ,

следовательно

по критерию

di > 0 выбираем диагональный пиксел.

 

 

 

 

 

С другой стороны, для компонент si

имеем:

Dd = 0 и Dv < 0 , так что по

критерию si < 0 также выбираем диагональный пиксел.

 

 

 

Итак: Dd < 0 , di < 0 – выбор горизонтального пиксела Pg ,

di > 0

выбор

диагонального пиксела Pd .

 

 

 

 

 

Dd > 0 , si < 0 – выбор диагонального пиксела Pd , si > 0

выбор

верти-

кального пиксела Pv .

 

 

 

 

 

Dd = 0 – выбор диагонального пиксела Pd .

 

 

 

 

Выведем рекуррентные соотношения для вычисления Dd

для i +1го ша-

га, после выполнения i го.

 

 

 

 

 

1.Для горизонтального шага к X i+1 , Yi

X i+1 = X i +1, Yi+1 = Yi

,

 

 

68