Реферат: Алгоритм Брезенхема

⚡ 👉🏻👉🏻👉🏻 ИНФОРМАЦИЯ ДОСТУПНА ЗДЕСЬ ЖМИТЕ 👈🏻👈🏻👈🏻
Хоча алгоритм Брезенхема був спочатку розроблений для цифрових графопобудовувачів, однак він в тій же мірі підходить для використання растровими пристроями з ЕПТ. Алгоритм вибирає оптимальні растрові координати для представлення відрізка. У процесі роботи одна з координат – або x, або y (в залежності від кутового коефіцієнта) – змінюється на одиницю. Зміна іншої координати (на 0 чи 1) залежно від відстані між дійсним положенням відрізка і найближчих координат сітки. Таку відстань ми назвемо похибкою.
Алгоритм побудований так, що потрібно перевірити лише знак цієї похибки. На рис. 3.1 це ілюструється для відрізка в першому октанті, тобто для відрізка з кутовим коефіцієнтом, що лежить у діапазоні від 0 до 1. З малюнка можна помітити що, якщо кутовий коефіцієнт відрізка з точки (0,0) більший, ніж 1/2, то перетин з прямою x=1 буде розташований ближче до прямої y=1, ніж до прямої y=0. Отже, точка растра (1,1) краще апроксимує хід відрізка, ніж точка (1,0). Якщо кутовий коефіцієнт менше 1/2, то навпаки. для кутового коефіцієнта, рівного 1/2, немає кращого вибору. У даному випадку алгоритм вибирає точку (1,1).
Не усі відрізки проходять через точки растра. Подібна ситуація ілюструється рис. 3.2, де відрізок з тангенсом кута нахилу 3/8 спочатку проходить через точку растра (0,0) і послідовно перетинає три піксели. Також ілюструється обчислення похибки при представленні відрізка дискретними пікселами.
Графік похибки в алгоритмі Брезенхема
Тому що бажано перевіряти тільки знак похибки, то вона спочатку встановлюється рівною -1/2. Таким чином, якщо кутовий коефіцієнт відрізка дорівнює чи більший 1/2, то величина похибки в наступній точці растра з координатами (1,0) може бути обчислена як
де m – кутовий коефіцієнт. У нашому випадку при початковому значенні похибки -1/2
Тому що е від’ємне, відрізок пройде нижче середини піксела. Отже, піксел на тому ж самому горизонтальному рівні краще апроксимує положення відрізка, тому в не збільшується. Аналогічно обчислюємо похибку e=-1/8+3/8=1/4 у наступній точці растра (2,0). Тепер е додатне, значить відрізок пройде вище середньої точки. Растровий елемент (2,1) з наступною по величині координатою в краще апроксимує положення відрізка. Отже, у збільшується на 1. Перше ніж розглядати наступний піксел, необхідно відкоректувати похибку відніманням від неї 1. Маємо e=1/4–1=-3/4. Помітимо, що перетин вертикальної прямої x=2 із заданим відрізком лежить на 1/4 нижче прямої у=1. Якщо ж перенести відрізок 1/2 вниз, ми одержимо саме величину -3/4. Продовження обчислень для наступного піксела дає e=-3/4+3/8=-3/8.
Тому що е від’ємне, то y не збільшується. З усього сказаного випливає, що похибка – це інтервал, що відтинається по осі y
розглянутим відрізком у кожному растровому елементі (відносно -1/2).
Приведемо алгоритм Брезенхема для першого октанта, тобто для випадку 0£Dy£Dx.
Алгоритм Брезенхема розкладання в растр відрізка для першого октанта передбачається, що кінці відрізка (x1, y1) і (x2, y2) не збігаються.
Integer – функція перетворення в ціле
Ініціалізація з виправленням на половину піксела
Блок-схема алгоритму на рис. 3.3. Приклад наведений нижче.
Розглянемо відрізок, проведений із точки (0,0) у точку (5,5). Розклад відрізка в растр по алгоритму Брезенхема приводить до такого результату:
Результати роботи покрокового циклу
Результат показаний на рис. 3.4 і збігається з очікуваним. Помітимо, що точка растра з координатами (5,5) не активована. Цю точку можна активувати шляхом зміни циклу for-next на 0 to Dx. Активацію точки (0,0) можна усунути, якщо поставити оператор Plot безпосередньо перед рядком next i.
Результат роботи алгоритму Брезенхема в першому октанті
Щоб реалізація алгоритму Брезенхема була повною необхідно розглянути відрізки у всіх октантах. Модифікацію легко зробити, враховуючи в алгоритмі номер квадранта, в якому лежить відрізок і його кутовий коефіцієнт. Коли абсолютна величина кутового коефіцієнта більше 1, у постійно змінюється на одиницю, а критерій похибки Брезенхема використовується для ухвалення рішення про зміну величини x. Вибір постійно змінюваної координати (на +1 чи -1) залежить від квадранта (рис. 4.1.). Загальний алгоритм може бути оформлений у наступному вигляді:
Узагальнений цілочисельний алгоритм Брезенхема квадрантів передбачається, що кінці відрізка (x1, y1) і (x2, y2) не збігаються усі змінні вважаються цілими Sign – функція, що повертає -1, 0, 1 для від’ємного, нульового і додатнього аргумента відповідно ініціалізація змінних
обмін значень Dx і Dy в залежності від кутового коефіцієнта нахилу відрізка
ініціалізація e з виправленням на половину піксела
Розгляд випадків для узагальненого алгоритму Брезенхема
Для ілюстрації розглянемо відрізок із точки (0, 0) у точку (-8, -4).
Результати роботи покрокового циклу
Результат роботи узагальненого алгоритму Брезенхема в третьому квадранті
На рис. 4.2 показаний результат. Порівнюючи з рис. 2.2 бачимо, що результати роботи двох алгоритмів відрізняються.
3. Алгоритм Брезенхема для генерації кола
У растр потрібно розкладати не тільки лінійні, але й інші, більш складні функції. Розкладанню конічних перетинів, тобто кіл, еліпсів, парабол, гіпербол, було присвячено значне число робіт. Найбільша увага, зрозуміло, приділена колу. Один з найбільш ефективних і простих для розуміння алгоритмів генерації кола належить Брезенхему. Для початку відмітимо, що необхідно згенерувати тільки одну восьму частину кола. Інші його частини можуть бути отримані послідовними відображеннями, як це показано на рис. 5.1. Якщо згенерований перший октант (від 0 до 45° проти годинникової стрілки), то другий октант можна отримати дзеркальним відображенням відносно прямої y=х, що дає в сукупності перший квадрант. Перший квадрант відбивається відносно прямої х=0 для отримання відповідної частини кола в другому квадранті. Верхнє півколо відбивається відносно прямої y=0 для завершення побудови. На рис. 5.1 наведені двовимірні матриці відповідних перетворень.
Генерація повного кола з дуги в першому октанті
Для виведення алгоритму розглянемо першу чверть кола з центром у початку координат. Помітимо, що якщо робота алгоритму починається в точці х=0, у=R,
то при генерації кола за годинниковою стрілкою в першому квадранті у
є монотонно спадною функцією аргумента х
(рис. 5.2). Аналогічно, якщо вихідною точкою є у=
0, х
= R,
то при генерації кола проти годинникової стрілки х
буде монотонно спадною функцією аргументу у.
У нашому випадку вибирається генерація за годинниковою стрілкою з початком у точці х
=0, у=R.
Передбачається, що центр кола і початкова точка знаходяться точно в точках растра.
Для будь-якої заданої точки на колі при генерації за годинниковою стрілкою існує тільки три можливості вибрати наступний піксел, що щонайкраще наближає коло: горизонтально вправо, по діагоналі вниз і вправо, вертикально вниз. На рис. 5.3 ці напрямки позначені відповідно m H
, m D
, m V
.
Алгоритм вибирає піксел, для якого мінімальний квадрат відстані між одним з цих положень і колом, тобто мінімум з
m D
=|(x i
+1) 2
+(y i
-1) 2
-R 2
|
Різниця між квадратами відстаней від центра кола до діагонального піксела (x i
+1, у i
-
1) і від центра до точки на колі R 2
дорівнює
Як і в алгоритмі Брезенхема для відрізка, для вибору відповідного піксела бажано використовувати тільки знак похибки, а не її величину.
При D i
<0 діагональна точка (x i
+1, у i
-
1) знаходиться всередині реального кола, тобто це випадки 1 або 2 на рис. 5.4. Ясно, що в цій ситуації варто вибрати або піксел (x i
+1, у
i
) ,
тобто m H
, або піксел (x i
+1, у
i
-
1), тобто m D
. Для цього спочатку розглянемо випадок 1 і перевіримо різницю квадратів відстаней від кола до пікселів у горизонтальному і діагональному напрямках:
d=|(x i
+1) 2
+(y i
) 2
-R 2
|-|(x i
+1) 2
+(y i
-1) 2
-R 2
|
При d<0 відстань від кола до діагонального піксела більша, ніж до горизонтального .
Навпаки, якщо d>0, відстань до горизонтального піксела більша. Таким чином,
при d<=0 вибираємо m H
(x i
+1, у i
)
при d>0 вибираємо m D
(x i
+1, у i
-1)
При d=0, коли відстань від кола до обох пікселів однакова, вибираємо горизонтальний крок.
Кількість обчислень, необхідних для оцінки величини d, можна скоротити, якщо помітити, що у випадку 1
тому що діагональний піксел (x i
+1, у
i
-
1) завжди лежить всередині кола, а горизонтальний (x i
+1, у
i
) –поза ним. Таким чином, d можна обчислити за формулою
d =
(x i
+1) 2
+(y i
) 2
-R 2
+(x i
+1) 2
+(y i
-1) 2
-R 2
Доповнення до повного квадрата члена (y i
) 2
за допомогою додавання і віднімання – 2y i
+
1 дає
d=2 [(x i
+1) 2
+(y i
-1) 2
-R 2
]+2y i
-
1
У квадратних дужках стоїть по визначенню D i
і його підстановка
Розглянемо випадок 2 на рис. 5.4 і помітимо, що тут повинен бути обраним горизонтальний піксел (x i
+1, у i
), тому що у є монотонно спадною функцією. Перевірка компонентів d показує, що
оскільки у випадку 2 горизонтальний (x i
+1, у i
) і діагональний (x i
+1, у i
-1) піксели лежать усередині кола. Отже, d<0, і при використанні того ж самого критерію, що й у випадку 1, вибирається піксел (x i
+1, у i
).
Якщо D i
>0, то діагональна точка (x i
+1, у i
-1) знаходиться поза колом, тобто це випадки 3 і 4 на рис. 5.4. У даній ситуації ясно, що потрібно вибрати піксел (x i
+1, у i
-1), або (x i
, у i
-1). Аналогічно розгляду попереднього випадку критерій вибору можна отримати, розглядаючи спочатку випадок 3 і перевіряючи різницю між квадратами відстаней від кола до діагонального m D
і вертикального m V
пікселів, тобто
d '
=|(x i
+1) 2
+(y i
-1) 2
-R 2
|-|(x i
) 2
+(y i
-1) 2
-R 2
|.
При d '
<
0 відстань від кола до вертикального піксела (x i
, у i
-1) більша і варто вибрати діагональний крок до піксела (x i
+1, у i
-1). Навпаки, у випадку d '
>0 відстань від кола до діагонального піксела більша і варто вибрати вертикальний рух до піксела (x i
, у i
-1). Таким чином, при d '
<=
0 вибираємо m D
(x i
+1, у i
-1), при d '>
0 вибираємо m V
(x i
, у i
-1).
Тут для випадку d '
=0, тобто коли відстані рівні, обраний діагональний крок.
Перевірка компонентів d '
показує, що
оскільки для випадку 3 діагональний піксел (x i
+1, у i
-1) знаходиться поза колом, тоді як вертикальний піксел (x i
, у i
-1) лежить всередині кола. Це дозволяє записати d '
у вигляді
d '
=(x i
+1) 2
+(y i
-1) 2
-R 2
+(x i
) 2
+(y i
-1) 2
-R 2
Доповнення до повного квадрата члена (x i
) 2
за допомогою додавання і віднімання 2x i
+1 дає
d '
=2 [(x i
+1) 2
+(y i
-1) 2
-R 2
]-2x i
-1
Використання визначення D i
приводить вираз до вигляду
Тепер, розглядаючи випадок 4, знову зауважимо, що варто вибрати вертикальний піксел (x i
, у i
-1), тому що y є монотонно спадною функцією від х.
Перевірка компонентів d '
для випадку 4 показує, що
Оскільки обидва піксели знаходяться поза колом. Отже, d '
>0 і при використанні критерію, розробленого для випадку 3, відбувається вірний вибір m V
.
Залишилося перевірити тільки випадок 5 на рис. 5.4, який зустрічається, коли діагональний піксел (x i
+1, у i
-1) лежить на колі, тобто D i
=0. Перевірка компонентів d показує, що
Отже, d>0 і вибирається діагональний піксел (x i
+1, у i
-1). Аналогічним чином оцінюємо компоненти d '
:
і d '
<0, що є умовою вибору правильного діагонального кроку до (x i
+1, у i
-1). Таким чином, випадок D i
=0 підлягає тому ж критерію, що і випадок D i
<0 чи D i
>0. Підіб'ємо підсумок отриманих результатів:
d<=0вибираємо піксел (x i
+1, у i
) – m H
d >
0 вибираємо піксел (x i
+1, у i
-1) –
m D
d '
<=0 вибираємо піксел (x i
+1, у i
-1) – m D
d '>
0 вибираємо піксел (x i
, у i
-1) – m V
D i
=0 вибираємо піксел (x i
+1, у i
-1) – m D
Легко розробити прості рекурентні співвідношення для реалізації покрокового алгоритму. Спочатку розглянемо горизонтальний крок m H
до піксела (x i
+1, у i
) .
Позначимо це нове положення піксела як (i+1). Тоді координати нового піксела і значення D i
рівні
D i+1
=(x i+1
+1) 2
+(y i+1
-1) 2
-R 2
=D i
+2x i+1
+1
Аналогічно координати нового піксела і значення D i
для кроку m D
до піксела (x i
+1, у i
-1) такі:
Те ж саме для кроку m V
до (x i
, у i
-1)
Реалізація алгоритму Брезенхема на псевдокоді для кола наводиться нижче.
Покроковий алгоритм Брезенхема для генерації кола в першому квадранті усі змінні – цілі ініціалізація змінних
Виділеннявипадку 1 чи 2, 4 чи 5, чи 3
Змінна межі встановлюється в нуль для закінчення роботи алгоритму на горизонтальній осі, в результаті генерується коло у першому квадранті. Якщо необхідний лише один з октантів, то другий октант можна отримати за допомогою установки Межа= Integer
(R/sqrt(2)), а перший – за допомогою відображення другого октанта відносно прямої у=х (рис. 5.1). Блок-схема алгоритму показана на рис. 5.5.
Блок-схема покрокового алгоритму Брезенхема для генерації кола в першому квадранті
Розглянемо коло радіусом 8 з центром в початку координат. Генерується тільки перший квадрант.
Покрокове виконання основного циклу
2d=2 (-14)+2 (8) – 1=-13<0 go to 10
Результати всіх послідовних проходів алгоритму зведені в таблицю. Список пікселів обраних алгоритмів складається з (0,8), (1,8), (2,8), (3,7), (4,7), (5,6), (6,5), (7,4), (7,3), (8,2), (8,1), (8,0).
Результати показані на рис. 5.6. разом з реальним колом. Алгоритм легко узагальнюється для інших квадрантів чи дуг кіл.
Результати роботи покрокового алгоритму Брезенхема генерації кола
Название: Алгоритм Брезенхема
Раздел: Рефераты по информатике, программированию
Тип: реферат
Добавлен 14:02:40 22 марта 2011 Похожие работы
Просмотров: 737
Комментариев: 15
Оценило: 2 человек
Средний балл: 5
Оценка: неизвестно Скачать
Срочная помощь учащимся в написании различных работ. Бесплатные корректировки! Круглосуточная поддержка! Узнай стоимость твоей работы на сайте 64362.ru
Привет студентам) если возникают трудности с любой работой (от реферата и контрольных до диплома), можете обратиться на FAST-REFERAT.RU , я там обычно заказываю, все качественно и в срок) в любом случае попробуйте, за спрос денег не берут)
Да, но только в случае крайней необходимости.
Реферат: Алгоритм Брезенхема
Сочинение На Тему Мой Родной Узбекистан
Реферат: Движение в центральном симметричном поле
Реферат по теме Система безопасности заказчика
Реферат: Правопреемство в международном праве
Учебное пособие: Методические указания по курсам «Теория информационных систем» и«Базы данных» Разделы «Реляционная алгебра» и«Язык sql»
Реферат На Тему Баскетбол 4 Класс
Пример Реферата Старшей Медсестры
Дипломная работа по теме Правовое регулирование экспедиционной деятельности
Исследование социальной адаптации
Курсовая работа: Управление бюджетной системой России
Фрэнсис Дрейк Реферат По Географии 5 Класс
Сочинение: Проблематика пьесы Горького На дне
Курсовая работа по теме Проект оценки альтернативных стратегий развития железнодорожной сети России восточнее Урала
Доклад: Эннио Морриконе (Ennio Morricone)
Реферат На Тему Защита Ценных Ресурсов От Угроз
Доклад по теме Методы исследования клетки
Реферат: Програмування рядкових величин
Доклад по теме Лазерная коррекция, кератотомия - что это такое?
Практическая Работа По Окружающему Миру 1
Учебное пособие: Методические указания и контрольные задания для студентов-заочников образовательных учреждений среднего специального образования по специальности №1701 Монтаж и техническая эксплуатация
Реферат: Технико-экономические и организационные мероприятия по снижению себестоимости и повышению прибыли и рентабельности производства ООО "Ювиди"
Статья: Птицы зимы
Реферат: Финансовая стратегия предприятия