Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Коссак графіка.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
5.68 Mб
Скачать

4.1.3. Побудова кола

Коло має симетричну форму. Кожний з алгоритмів для побудови кола може використовувати цю симетрію рисуючи лише одну восьму його частину (рис. 4.7).

Рис. 4.7. Розбиття кола на октанти

Нехай виникає потреба нарисувати коло з центром у (0,0) та радіусом у другому октанті. Якщо ми нарисуємо всі ці точки в цьому октанті, то решта можна дорисувати, використовуючи симетрію.

Нехай треба почати з пікселя у другому октанті (рис. 4.8), тоді наступним можливим підсвіченим пікселем може бути або , або .

Рис. 4.8. Вибір пікселя в другому октанті

Треба визначити змінну, згідно з якою прийматимуть рішення чи залишати координату без зміни, чи ні, тоді як координата буде постійно збільшуватись на 1.

Рис. 4.9. Визначення відстаней і

Якщо координата відповідає деякій координаті , яка є між величинами і , то y задовольняє рівняння

.

Визначимо різниці і у вигляді (рис. 4.9)

;

.

Якщо покласти , то створимо нову змінну, від знака якої залежить вибір наступної точки, яка буде підсвічена. Якщо < 0, то наступна підсвічена точка – , якщо , то –

Запишемо рекурсивну формулу.

,

отже

.

Після підстановки отримаємо

.

Відповідно до знака змінної можна отримати таке:

якщо < 0, то , якщо , то – .

Оскільки у визначенні другого октанта ми починаємо з , то початкове значення змінної

,

що приводить до такого алгоритму, який називають алгоритмом Брезенгема для побудови кола:

Input (r)

x: = 0

y: = r

error: = 3 – 2r

while x ≤ y do

plot (x, y)

hold on

x: = x + 1

if error ≥ 0

y: = y + 1

error: = error – 4y

end

error: = error + 4x +2

end.

У другому октанті (рис. 4.10) . У напряму зроблено кроків, що відповідають крокам у напряму . Загалом алгоритм обчислює точок. Загальна кількість точок, які будуть виводитись для рисування кола, .

Рис. 4.10. Другий октант

4.1.4. Побудова еліпса

Нехай треба нарисувати еліпс з центром (0; 0) та головними діагоналями, які дорівнюють 2α і 2b, α, b (рис. 4.11). Еліпс має чотири симетричні сегменти.

Рис. 4.11Перший сегмент Рис. 4.12. Вибір наступного пікселя

Область 1 відділяється від області 2, якщо . У цій області спочатку підсвічується піксель , а потім – або . Оскільки ми працюємо в першій області, то наступним підсвіченим пікселем може бути або , або . Зазначимо, що координата збільшена на 1 і треба лише визначити, який з двох варіантів вибрати – чи .

Нехай точка Μ розміщена посередині сегмента CD, її координати (рис. 4.12)

.

Якщо Τ є точкою перетину еліпса з сегментом CD і – відстань від серединної точки Μ, то можна записати рівняння еліпса:

.

З наведених вище формул маємо:

.

Позначимо через координати серединної точки Μ для області 1, тоді

.

Знак виразу визначає положення наступної точки:

Якщо , то T правіше від M, вибір точки D, якщо , то T лівіше від M, вибір точки C

Знайдемо зв’язок між двома змінними та , для області 1 запишемо

В області 1 , отже вибір точки в першому октанті такий: якщо , то D, якщо – , то C.

Початкове значення для можна вибрати так. Для маємо

.

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

Рис. 4.13. Вибір пікселя в області 2.

Вибір точки в області 2 такий: якщо , то Β, якщо , то С.

Межу областями 1 і 2 визначають так. Оскільки зміна областей відбувається в точці, де нахил тангенса є дорівнює -1, то треба обчислити похідну від рівняння еліпса:

; .

Якщо , то відбувається зміна областей з 1 до 2. Для створення алгоритму побудови еліпса достатньо використовувати тільки одну змінну . Змінну після переходу через границю можна обчислити, використовуючи змінну . Точніше кажучи,

Остаточно отримаємо

.

Наведемо загальний огляд алгоритму побудови еліпса (рис. 4.14).

Рис. 4.14. Побудова еліпса в області 1 та 2

В області 1 виконуються кроків в напрямі та кроків у напрямі , сумарно обчислюють точок. В області 2 виконують кроків у напрямі та кроків в напрямі , сумарно обчислюють точок.

Для першого кроку в напрямі області 1 потрібно три додавання на точку. Тому значення необхідних операцій

.

Про цей алгоритм йтиметься у розділі 5.