Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
Основні положення. Попередньо розглянуті алгоритми дають розклад в растр відрізку який лежить по один бік від реального і на одному з кінців відрізкуПопередньо розглянуті алгоритми дають розклад в растр відрізку який лежить по один бік від реального і на одному з кінців відрізку з’являється зайва точка, тобто результат роботи алгоритмів залежить від орієнтації. Крім цього вони використовують дійсну арифметику, що суттєво сповільнює роботу. Тому американським вченим Брезенхемом був розроблений алгоритм розкладу відрізків в растр позбавлений цих недоліків. Початково він розроблявся для цифрових плоттерів, а потім він був розповсюджений і на більшість РСП. Алгоритм вибирає оптимальні растрові координати для представлення відрізка. В процесі роботи 1 з координат — або х, або у (залежно від кутового коефіцієнту) змінити на 1. Зміна 2-ї координати (або на 0 або на 1) залежить від відстані між дійсним положенням відрізку і найближчими координатами сітки. Таку відстань будемо називати похибкою. Алгоритм побудовано так, що необхідно перевіряти лише знак цієї похибки. На рис. 2.1 це проілюстровано для відрізка в першому октанті, тобто для відрізку з кутовим коефіцієнтом, який лежить в діапазоні від 0 до 1. З рисунка можна зауважити, що якщо кутовий коефіцієнт відрізка з точки (0, 0) більший за 1/2, то його перетин з прямою буде розташованим ближче до прямої , ніж до прямої . Отже, точка растру (1, 1) краще апроксимує хід відрізку ніж точка (1, 0). Якщо кутовий коефіцієнт менший 1/2, то справедливим є обернене. Для кутового коефіцієнту рівного 1/2 немає якогось переважаючого вибору. В даному випадку алгоритм вибирає точку (1, 1). Не всі відрізки проходять через точки растру. Така ситуація ілюструється рисунком 3.2, де відрізок з тангенсом меншим нахилу 3/8 спочатку проходить через точку растру (0,0) і послідовно перетинає 3 піксели. На нижньому графіку представлено обчислення похибки при представленні відрізку дискретними пікселями. Оскільки бажано перевіряти тільки знак похибки, то вона початково встановлюється рівною –1/2.
Рис. 2.2. Графік похибки в алгоритмі Брезенхема. Таким чином, якщо кутовий коефіцієнт відрізка більший або рівний 1/2, то величина похибки в наступній точці растру з координатами (1, 0) може бути обчислена, як
де m — кутовий коефіцієнт. В нашому випадку при початковому значенні похибки –1/2
Оскільки е від’ємне, відрізок пройде нижче середини піксела. Отже, піксель на тому ж горизонтальному рівні краще апроксимує положення відрізку, тому y не збільшується. Аналогічно обчислюємо похибку в наступній точці растру (2, 0). Тепер е додатне, а значить відрізок пройде вище середньої точки. Растровий елемент (2, 1) з наступною по величині координатою y краще апроксимує положення відрізка. Отже, y збільшується на 1. Перш ніж розглядати наступний піксель, необхідно відкоригувати похибку відніманням з неї одиниці. Маємо ЗаВідзначимо, що перетин вертикальної прямої з заданим відрізком лежить на 1/4 нижче прямої . Якщо ж перенести відрізок 1/2 вниз, то ми отримаємо якраз величину –3/4. Продовження обчислень для наступного піксела дає
Оскільки е від’ємне, то y не збільшиться. З усього вищесказаного випливає, що похибка — це інтервал, який відтинається по осі y, відрізком, що розглядається в кожному растровому елементі (відносно –1/2). Наведемо алгоритм Брезенхема для 1-го октанту, тобто для випадку : А лго рит м Брезе нхема роз кладу в р ас тр відрізк а для перш о го о кт а нт у припускаємо, що кінці відрізка та не співпадають integer — функція перетворення в ціле — цілі e — дійсне ініціалізація змінних
ініціалізація е з поправкою на половину піксела початок основного циклу for i = 1 to D x Plot (x, y) wh ile ( e ³ 0)
|