Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
20071227_Chumak_MU.doc
Скачиваний:
3
Добавлен:
09.11.2019
Размер:
694.27 Кб
Скачать

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.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]