Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

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

Будемо міркувати подібно алгоритму Брезенхема для відрізків (з відповідними виправленнями на 4-й октант) [17]. Із двох можливих пікселів в 4-му октанті (відповідних вертикальному й діагональному зсувам, які позначаються аналогічно колишнім s і d, див. мал. 6.10) будемо вибирати той, відстань від окружності до якого менше.

 

Рис. 6.8. Відстані до окружності.

Для того щоб вибрати один із двох можливих пікселів, будемо порівнювати відстані від них до окружності: де відстань менше - той пиксель і буде знайденим. У прикладі на мал. 6.8 рівняються відстані від крапок S(xs, ys) і D(xd, yd) до окружності з радіусом R. З евклідової метрики одержуємо:

Але обчислення квадратного кореня - трудомістка операція, тому при досить більших R ми будемо заміняти порівняння відстаней порівнянням наближених значень їхніх квадратів (див. мал. 6.9):

 

Рис. 6.9. Наближене порівняння відстаней.

Зменшимо два доданки на приблизно однакові величини:

замінимо на ,

замінимо на

одержимо

Таким чином, приблизно

1. D ближче до окружності, чим S

2. S ближче до окружності, чим D

Рис. 6.10. Алгоритм Брезенхема для окружності.

Нехай (x, y) - поточний піксель. Позначимо

Тоді із двох можливих зсувів d і s виберемо.

1. , тобто (x + 1, y + 1) ближче до окружності, чим (x, y + 1):

d: Переходимо в (x + 1, y + 1) і надаємо відповідні збільшення F, ΔF(s),?F(d):

F = F +?F(d);?F(s) =?F(s)+4;?F(d) =?F(d)+8.

2. , тобто (x, y+1) ближче до окружності, чим (x + 1, y + 1):

s: Переходимо в (x, y + 1) і надаємо відповідні збільшення F, ΔF(s), ΔF(d):

F = F +?F(s);?F(s) =?F(s)+4;?F(d) =?F(d)+4.

Якщо ми починаємо з (-R, 0), то початкові значення будуть наступними:

Легко бачити, що в алгоритмі всі величини, пов'язані з F, крім F початкового, будуть кратні 2. Але, якщо ми поділимо всі ці величини на 2 (надалі значення всіх величин уже розуміються в цьому змісті), те . Тому що збільшення F можуть бути тільки цілочисловими, те, де ; тобто якщо відняти від всіх значень, то знак F не зміниться для всіх T, крім T = 0. Для того щоб результат порівняння залишився колишнім, будемо вважати, що F = 0 тепер відповідає зсуву s.

x = -r; y = 0; F = 1-r;?Fs = 3;?Fd = 5-2*r; while(x + y < 0){ plot8(x, y); if(F > 0) { // d: Діагональний зсув F +=?Fd; x++; y++;?Fs += 2;?Fd += 4; } else { // s: Вертикальний зсув F +=?Fs; y++;?Fs += 2;?Fd += 2; }}

Лістинг 6.5. Алгоритм Брезенхема для окружності

Розмірність обчислень цього алгоритму (тобто відношення максимальних модулів значень величин, з якими він оперує до модулів вихідних даних (у цьому випадку R)) дорівнює 2.

<== предыдущая лекция | следующая лекция ==>
Зображення окружностей | Побудова по неявній функції
Поделиться с друзьями:


Дата добавления: 2014-01-07; Просмотров: 504; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.008 сек.