Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
Основні положення
В растр необхідно розкладати не тільки лінійні, але і інші, більш складні функції. Один з найбільш ефективних і простих для розуміння алгоритмів генерування кола належить американському вченому Брезенхему. Для початку відзначимо, що необхідно згенерувати тільки 1/8 частину кола. Решта його частин можуть бути отримані послідовними відображеннями, як це показано на рис. 3.1.
Рис. 3.1. Генерування повного кола з дуги в першому октанті Зобразимо генерування повного кола з дуги в першому октанті графічно. Якщо згенерувати перший октант (від 0 до 45° проти годинникової стрілки), то другий октант можна отримати дзеркальним відображенням відносно прямої Перший квадрант відображається відносно прямої Для виводу алгоритму розглянемо першу чверть кола з центром в початку координат. Відзначимо, що якщо робота алгоритму починається в точці
Аналогічно, якщо початковою точкою є На рис. 3.3 ці напрями позначаються відповідно
Обчислення можна спростити, якщо зауважити, що в околиці точки
Рис. 3.4. Перетин кола та сітки растру Різниця між квадратами відстаней від центру кола до діагоналей піксела
Як і в алгоритмі Брезенхема для відрізка, для вибору відповідного піксела бажано використовувати тільки знак похибки, а не її величину. При
При при при При Кількість обчислень, яка необхідна для оцінки величини
оскільки діагональний піксель
Доповнення до повного квадрату члена
В квадратних дужках стоїть за означенням
суттєво спрощує вираз. Розглянемо випадок 2 на рис. 3.4 і зауважимо, що тут повинен бути вибраний горизонтальний піксель
оскільки у випадку 2 горизонтальний Якщо
При при при Тут у випадку Перевірка компонент
оскільки для випадку 3 діагональний піксель
Доповнення до повного квадрату члена
Використання визначення
Тепер, розглядаючи випадок 4 знову зауважимо, що необхідно вибрати вертикальний піксель Перевірка компонент
оскільки обидва піксели знаходяться поза колом. Отже, Залишилось перевірити тільки випадок 5 на рис. 3.4, який зустрічається коли діагональний піксель
Отже,
і Підведемо підсумок отриманих результатів:
Легко розробити прості рекурентні співвідношення для реалізації покрокового алгоритму. Спочатку розглянемо горизонтальний крок
Аналогічно координати нового піксела і значення
Те саме для кроку
Реалізація алгоритму Брезенхема на псевдокоді для кола наведена нижче. Покроковий алгоритм Брезенхема для генерування кола в першому квадр а нті всі змінні — цілі ініціалізація змінних
Рис. 3.5. Блок-схема покрокового алгоритму Брезенхема генерування кола в першому квадранті Змінна межі встановлюється на нуль для закінчення роботи алгоритму на горизонтальній осі, в результаті генерується коло в першому квадранті. Якщо потрібен лише один з октантів, то другий октант можна отримати за допомогою встановлення Приклад 3 .1. Алгоритм Брезенхема для кола
Для ілюстрації роботи алгоритму генерування кола розглянемо коло радіусом 8 з центром в початку координат. Генерується тільки перший квадрант. початкові установки покрокове виконання основного циклу ¼ Результати всіх послідовних проходів алгоритму зведені в таблицю. Список пікселів, вибраних алгоритмом, складається з (0, 8), (1, 8), (2, 8), (3, 7), (4, 7), (5, 6), (6, 5), (7, 4), (7, 3), (8, 2), (8, 1), (8, 0). Результати показано на рис. 3.6 разом з реальним колом. Алгоритм легко узагальнюється для інших квадрантів або дуг кіл. Рис. 3.6. Результати роботи покрокового алгоритму Брезенхема для генерування кола Date: 2015-07-27; view: 529; Нарушение авторских прав |