Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
kol1.docx
Скачиваний:
2
Добавлен:
08.05.2019
Размер:
36.98 Кб
Скачать

21. Що таке поточний покажчик?

22. Яким чином здійснюється керування кольором і стилем геометричних фігур і тексту що виводиться?

23. Що таке відео сторінка?

Пам’ять відеобуфера підрозділяється на відеосторінки. Їхня кількість залежить від потокового режиму і типу адаптера. Більше однієї сторінки мають відеокарти EGA, VGA, Hercules. Нумерація сторінок починається з нуля. У кожний момент часу на екрані монітора може бути видимою одна сторінка. За замовчуванням це сторінка з номером 0. Сторінка, на якій у даний момент формується зображення, називається активною.

Для роботи зі сторінками передбачені дві процедури: setactivpage(int page) – встановлює активну сторінку для побудови зображення, при цьому створюваний рисунок не відображається на екрані. Після побудови зображення можна візуалізувати цю сторінку за допомогою процедури setvisualpage(int page).

24. Алгоритм Брезенхема для лінії: Для линии

void drawLine(int x1, int y1, int x2, int y2)

{

int deltaX = abs(x2 - x1);

int deltaY = abs(y2 - y1);

int signX = x1 < x2 ? 1 : -1;

int signY = y1 < y2 ? 1 : -1;

int error = deltaX - deltaY;

for (;;)

{

setPixel(x1, y1);

if(x1 == x2 && y1 == y2)

break;

int error2 = error * 2;

if(error2 > -deltaY)

{

error -= deltaY;

x1 += signX;

}

if(error2 < deltaX)

{

error += deltaX;

y1 += signY;

}

}

}

25. Методи пастеризації кола і еліпса

Алгоритм Брезенхема для окружности

void drawCircle(int x0, int y0, int radius) {

int x = 0;

int y = radius;

int delta = 2 - 2 * radius;

int error = 0;

while(y >= 0) {

setPixel(x0 + x, y0 + y);

setPixel(x0 + x, y0 - y);

setPixel(x0 - x, y0 + y);

setPixel(x0 - x, y0 - y);

error = 2 * (delta + y) - 1;

if(delta < 0 && error <= 0) {

++x;

delta += 2 * x + 1;

continue;

}

error = 2 * (delta - x) - 1;

if(delta > 0 && error > 0) {

--y;

delta += 1 - 2 * y;

continue;

}

++x;

delta += 2 * (x - y);

--y;

}

}

Для эллипса

void ellipse(int x, int y, int a, int b, int color)

{

int col,i,row,bnew;

long a_square,b_square,two_a_square,two_b_square,four_a_square,four_b_square,d;

b_square=b*b;

a_square=a*a;

row=b;

col=0;

two_a_square=a_square<<1;

four_a_square=a_square<<2;

four_b_square=b_square<<2;

two_b_square=b_square<<1;

d=two_a_square*((row-1)*(row))+a_square+two_b_square*(1-a_square);

while(a_square*(row)>b_square*(col))

{

putpixel(col+x,row+y,color);

putpixel(col+x,y-row,color);

putpixel(x-col,row+y,color);

putpixel(x-col,y-row,color);

if (d>=0)

{

row--;

d-=four_a_square*(row);

}

d+=two_b_square*(3+(col<<1));

col++;

}

d=two_b_square*(col+1)*col+two_a_square*(row*(row-2)+1)+(1-two_a_square)*b_square;

while ((row) + 1)

{

putpixel(col+x,row+y,color);

putpixel(col+x,y-row,color);

putpixel(x-col,row+y,color);

putpixel(x-col,y-row,color);

if (d<=0)

{

col++;

d+=four_b_square*col;

}

row--;

d+=two_a_square*(3-(row <<1));

}

}

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