Главная Случайная страница


Полезное:

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


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Общий алгоритм Брезенхема





Чтобы реализация алгоритма Брезенхема была полной необходимо обрабатывать отрезки во всех октантах. Модификацию легко сделатть, учитывая в алгоритме номер квадранта, в котором лежит отрезок и его угловой коэффициепт. Когда абсолютная величина углового коэффициента больше 1, у постоянно изменяется на единицу, а критерий ошибки Брезенхема используется для принятия решения об изменении величины x. Выбор постоянно изменяющейся (на +1 или -1) кооординаты зависит от квадранта (рис.4.1.). Общий алгоритм может быть оформлен в следующем виде:

Обобщенный целочисленный алгоритм Брезенхема квадрантов

предполагается, что концы отрезка (x1,y1) и (x2,y2) не совпадают

все переменные считаются целыми

Sign - функция, возвращающая -1, 0, 1 для отрицательного, нулевого и положительного аргумента соответственно

инициализация переменных

x = x1

y = y1

x = abs(x2 - x1)

y = abs(y2 - y1)

s1 = Sign (x2 - x1)

s2 = Sign (y2 - y1)

обмен значений x и y в зависимости от углового коэффициента наклона отрезка

if y < x then

Врем = x

x = y

y = Врем

Обмен = 1

Else

Обмен = 0

End if

инициализация  с поправкой на половину пиксела

 = 2*y - x

основной цикл

for i = 1 to x

Plot (x,y)

while ( =>0)

if Обмен = 1 then

x = x + s1

Else

y = y + s2

End if

 =  - 2*x

End while

if Обмен = 1 then

y = y + s2

Else

x = x + s1

End if

 =  + 2*y

Next i

Finish

Рис.4.1. Разбор случаев для обобщенного алгоритма Брезенхема.

 

Пример 4.1. обобщенный алгоритм Брезенхема.

Для иллюсрации рассмотрим отрезок из точки (0,0) в точку (-8, -4).

начальные установки

x = 0

y = 0

x = 8

y = 4

s1 = -1

s2 = -1

Обмен = 0

е = 0

результаты работы пошагового цикла

i Plot е x y
         
  (0,0)      
    -16   -1
    -8 -1 -1
  (-1,-1)      
      -2 -1
  (-2,-1)      
    -16 -2 -2
    -8 -3 -2
  (-3,2)      
      -4 -2
  (-4,2)      
    -16 -4 -3
    -8 -5 -3
  (-5,-3)      
      -6 -3
  (-6,-3)      
    -16 -6 -4
    -8 -7 -4
  (-7,-4)      
      -8 -4

 

Рис.4.2. Результат работы обобщенного алгоритма Брезенхема в третьем квадранте.

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

В следующем разделе рассматривается алгоритм Брезенхема для генерации окружности.







Date: 2015-07-01; view: 525; Нарушение авторских прав



mydocx.ru - 2015-2024 year. (0.006 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию