- •Київ кнутд 2007
- •1.2 Сфери використання
- •1.3 Головнi поняття I операцiї
- •1.4 Типи графiчних приладiв
- •2 Алгоритми растрової графiки
- •2.1 Растрова I векторна графiка
- •2.1.1 Цифровий диференцiйний аналiзатор
- •2.1.2 Алгоритм Брезенхема побудови вiдрiзкiв
- •2.1.3 Алгоритм Брезенхема креслення кола
- •2.1.4 Алгоритм Брезенхема побудови елiпса
- •2.2 Растрова розгортка багатокутникiв.
- •2.2.1 Алгоритм заповнення з упорядкованими списками ребер
- •2.2.2 Алгоритм заповнення за ребрами
- •2.2.3 Алгоритм заповнення iз списком ребер I прапорцем
- •2.2.4 Простий алгоритм заповнення iз зачiпкою
- •2.2.5 Алгоритм заповнення по рядкам iз зачiпкою
- •2.3 Ефект драбини
- •3. Лабораторнi роботи
- •3.1 Лабораторна робота BresLine на тему "Виведення вiдрiзкiв прямих за алгоритмом Брезенхема"
- •3.2 Лабораторна робота BresCirc на тему "Виведення дуг кола за алгоритмом Брезенхема".
- •3.3 Лабораторна робота BresEllips на тему "Виведення елiпсiв за алгоритмом Брезенхема".
- •3.4 Лабораторна робота FloodLine на тему "Заповнення полiгональних фiгур".
- •3.5 Лабораторна робота FloodCirc на тему "Заповнення довiльних областей".
- •4. Література
- •1 Вступ 5
- •2 Алгоритми растрової графiки 8
- •4. Література 54
2.3 Ефект драбини
До цього моменту розкладання вiдрiзку у растр i заповнення багатокутника ми вважали, що iнтенсивнiсть або колiр пiкселiв визначався iнтенсивнiстю або кольором окремої точки. У цих методах вважалось, що пiксел - це математична точка, а не скiнченна область екрана. Але треба також ураховувати вплив сусiднiх пiкселiв суцiльної областi, що заповнюється. Це - ефект драбини (рос. лестничый еффект). Головною причиною ефекту драбини є недостатнiсть наявностi пiкселiв однiєї iнтенсивностi на границi областi, де здiйснюється заповнення.
При наявностi декiлькох iнтенсивностей, тобто напiвтонiв сiрого або вiдтiнкiв кольору, зовнiшнiй вигляд ребра або вiдрiзка можна полiпшити розмиттям країв.
Як наслiдок простої модифiкацiї алгоритму Брезенхема можна отримати апроксимацiєю площини частини пiксела, що знаходиться у серединi багатокутника (див. [25]). Цю апроксимацiю можна використати для модуляцiї iнтенсивностi. Бiльш того, можна отримати безпосередньо значення iнтенсивностi, а не десятковий дрiб вiд її максимуму, якщо здiйснювати множення на максимальне число рiвнiв iнтенсивностi I наступних величин: тангенса кута нахилу (m), вагового коефiцiєнта (w) i похибки (e).
Вiдповiдний модифiкований алгоритм Брезенхема для першого квадранта.
procedure BresMod(Xs,Ys,Xf,Yf,I:Integer;Color:Tcolor);
var x,y,DeltaX,DeltaY:integer;m,w,e:real;
begin {BresMod}
x:=Xs; y:=Ys; DeltaX:=Xf-Xs;DeltaY:=Yf-Ys;
m:=(I*DeltaY)/DeltaX; w:=1-m; e:=1/2.;
Plot(x,y,m/2);
while (x<Xf) do
begin
if e<w
then begin
x:=x+1; e:=e+m;
end
else begin
x:=x+1; y:=y+1; e:=e-w;
end;
Plot(x,y,e);
end;
end; {BresMod}
Тут procedure Plot(x,y:integer,q:real);} - процедура виведення на форму пiксела з координатами (x, y) з iнтенсивнiстю q.
Лiтература. [5, стр.123-127].
3. Лабораторнi роботи
3.1 Лабораторна робота BresLine на тему "Виведення вiдрiзкiв прямих за алгоритмом Брезенхема"
Мета. Студент повинен навчитись створювати структури для представлення полiгональних двовимiрних моделей типу замкнених контурiв ("лiтер") у представленнi "ланцюга послiдовних вершин", здiйснювати организацiю вхiдного файлу з координатами таких контурiв, вводити полiгональнi двохвимiрнi моделi, здiйснювати операцiю замкнення контурiв i виводити контури "лiтер" за допомогою алгоритма Брезенхема виведенння окремих вiдрiзкiв.
Завдання. Створити текстовий вхiдний файл з вершин "лiтер", ввести вхiднi данi i накреслити на формi отриманi "лiтери" скориставшись алгоритмом Брезенхема креслення вiдрiзкiв.
Хiд виконання. За одержаними у викладача "лiтерами":
1. Накреслити цi "лiтери" на аркушi паперу у клiтинку таким чином, щоб кожна вершина контуру мала цiлочисельнi вiдноснi координати (власнi для кожної окремої "лiтери") у системi локальних математичних координат.
2. Розробити структуру вхiдного текстового файлу для введення "лiтер". Записати на аркушi паперу вхiдний файл для отриманих "лiтер" i затвердити його у викладача.
3. Розробити представлення "лiтер", написати програму введення даних з вхiдного файлу i здiйснити виведення контурiв "лiтер" на полотно форми з використанням алгоритму Брезенхема виведення вiдрiзкiв.
4. Оформити звiт з лабораторної роботи i провести її захист.
Питання до лабораторної роботи
1. Поняття растру. Пiксел. Растровий буфер.
2. Алгоритм цифрового диференцiйного аналiзатора. Переваги та недолiки методу.
3. Алгоритм Брезенхема будування вiдрiзкiв для першого квадранта. Переваги та недолiки методу.
4. Цiлочисельний алгоритм Брезенхема розкладу в растр вiдрiзка для першого квадранта. Переваги та недолiки методу.
5. Цiлочисельний алгоритм Брезенхема розкладу в растр будь-якого вiдрiзка. Переваги та недолiки методу.
Приклад органiзацiї вхiдного файла BresLine.inp
-1 8
1 0 0
2 0 10
3 5 10
4 6 11
5 6 9
6 5 8
7 2 8
8 2 0
-2 8 4 4 4
1 0 0
2 0 10
3 6 10
4 6 4
5 2 4
6 2 2
7 6 2
8 6 0
1 2 6
2 4 4
3 4 8
4 2 8
1 1 11
2 1 12
3 2 12
4 2 11
1 4 11
2 4 12
3 5 12
4 5 11
15 10 20
Тут записано двi лiтери. Код лiтери завжди вiд'ємне число (першої -1, другої -2). Далi, при кодi лiтери, вказанi числа вершин у контурах (перша лiтера має лише один контур з 8 вершин, друга - чотирi контура вiдповiдно з 8, 4, 4 i 4 вершинами). Кожен контур вказується власними послiдовними вершинами, що визначають (також послiдовно) ребра контуру, без замикання контуру, тобто без повторення його останньої вершини. Наприклад, у першої лiтери нема дев'ятої вершини "9 0 0".
До цiєї iнформацiї треба ще додати числа x, y, b тобто, величини у пiкселях розмiрiв одиницi клiтини уздовж осi OX, величини у пiкселях розмiрiв одиницi клiтини уздовж осi OY та кiлькiсть пiкселiв мiж лiтерами. Тому у кiнцi файла BresLine.inp наведено вiдповiдний рядок 15 10 20 тобто, x=15, y=10, b=20.