ПОБУДОВА ПРОСТИХ РУХОМИХ ГРАФІЧНИХ ЗОБРАЖЕНЬ

Лабораторна робота №12

ВИКОРИСТАННЯ ЕКРАНУ В ГРАФІЧНОМУ РЕЖИМІ.

ПОБУДОВА ПРОСТИХ РУХОМИХ ГРАФІЧНИХ ЗОБРАЖЕНЬ

(Варіант №8)

 

 

М е т а р о б о т и : побудова простих зображень на екрані в графічному режимі.
Вивчення засобів мови С++, призначених для розробки графічних програм. Отримання практичних навичок розробки графічних програм.

Використання екрану в графічному режимі

Сучасний ПК має у своєму складі графічну підсистему, яка поєднує в собі дві складові: апаратну і програмну. В залежності від технічних характеристик встановленого на ПК обладнання (дисплей, графічний контролер, обслуговуючий інтерфейс) і програмного забезпечення (БСВВ, ОС, драйвери, спеціалізовані прикладні мови програмування), показники якості зображень можуть відрізнятися дуже суттєво. Так, відеопідсистеми з офісними дисплеями можуть підтримувати розрізнювальну здатність екрану по горизонталі 3840, а по вертикалі 2400 точок (пікселів); екрани мобільних телефонів – від 320×200.

Версія Microsoft Visual C++ з MFC – бібліотекою у взаємодії з графічним драйвером EGAVGA.BGI, установленими на комп’ютерах навчальних класів університету, підтримує найбільш поширений графічний режим №2 – VGAHI.

Екран дисплею в цьому режимі підтримує розрізнювальну здатність 640×480 пікселів, колір яких може встановлюватися із 16 можливих

Перша координата (х) змінюється по горизонталі зліва направо, а друга координата (у) змінюється по вертикалі зверху донизу. Початок відліку – верхній лівий кут – має координати (0,0).

 
 


 

 

.

 

 

// Це – про текстовий режим екрану(на доопрацюванні)

В модулі conio.h зберігаються константи стандартних кольорів:


 

 

Константа Значення Константа Значення
Black Чорний DarkGray темно-сірий
Blue синій LightBlue світло-синій
Green зелений LightGreen світло-зелений
Cyan бірюзовий LightCyan світло-бірюзовий
Red червоний LightRed рожевий
Magenta малиновий LightMagenta світло-малиновий
Brown коричневий Yellow жовтий
LightGray світло-сірий White білий
      Blink блимаючий
             

Символи в текстовому режимі можуть мати будь-який колір із поданих в таблиці, а колір фону – тільки перші вісім – від BLACK до LIGHTGRAY.

Встановити колір символів на екрані можна за допомогою процедури textcolor();

колір фону, на який будуть виводитись символи – процедурою textbackground();

яскравість символів регулюється процедурами lowvideo() (зниження яскравості), highvideo() (підвищення яскравості) і normvideo() (установлення яскравості, яка була встановлена при запуску програми). Приклади:

textbackground(BROWN); //коричневий колір фону}

textcolor(WHITE); //білий колір символів }

textcolor(YELLOW+BLINK); //жовті символи блимаючі}

Крім наведених констант в модулі conio.h є спеціальна, заздалегідь визначена змінна textattr, якою можна користовуватись замість вищезгаданих функцій. Ця змінна в кожен момент має ціле числове значення і визначає всі атрибути кольорів (символів, фону, яскравості, блимання).

Якщо розглядати двійковий формат (байт) змінної textattr, то будемо мати:

- кожен двійковий розряд несе інформацію тільки про один колір, який має бути або активним (1), або пасивним (0);

- перша тетрада (розряди 0..3) – колір символів:

o 0-й біт – синій;

o 1-й біт – зелений;

o 2-й біт – червоний;

o 3-й біт – яскравість;

- друга тріада (розряди 4..6) – колір фону:

o 4-й біт – синій;

o 5-й біт – зелений;

o 6-й біт – червоний;

- останній (7-й) біт вмикає або вимикає блимання символів.

 


 

Завдання 12-1: Написати программу, яка створить на екрані малюнок

Програма:

#include<graphics.h>

#include<stdlib.h>

#include<stdio.h>

#include<conio.h>

#include<math.h>

#include<dos.h>

int main ()

{

clrscr();

int gdriver=DETECT,gmode, errorcode;

int size,i;

float x,y,t;

initgraph(&gdriver, &gmode, "");

errorcode=graphresult();

if (errorcode !=grOk)

{

printf("Graphics error: %s \n",grapherrormsg(errorcode));

printf("Pres any key to halt:");

getch();

exit(1);

}

/* line(0,0,getmaxx(),getmaxy());

moveto(300,300);

ellipse(300,300,35,150,50,25);

ellipse(340,310,90,180,50,25);

ellipse(308,300,150,200,20,25);

ellipse(275,335,73,113,50,50);

getch();

linerel(25,-25);

bar3d(320,240,360,280,10,50);

size=imagesize(320,220,380,280);

int *p=new[size];

getimage(320,220,380,280,p);

putimage(520,240,p,1);

for(i=1;i,500;i+=5)

{ putimage(x,y,p,1);

t=i/180.0*M_PI;

x=100*sin(t)+320;

y=240-100*cos(t);

putimage(x,y,p,1);

delay(50);

}

getch();

 

closegraph();

delete p;*/

moveto(300,250);

linerel(30,0);

linerel(-10,10);

linerel(30,30);

linerel(-10,10);

linerel(-30,-30);

linerel(-10,10);

linerel(0,-30);

setfillstyle(2,8);

floodfill(305,255,WHITE);

getch();

return 0;

}

 
 


Завдання 12-2: Написати програму яка створює на осі координат фігуру

Програма:

#include<iostream.h>

#include<conio.h>

#include<stdio.h>

#include<stdlib.h>

#include<graphics.h>

#include<math.h>

#include<dos.h>

 

void main()

{

float x,y;

int xe,ye;

int gd=DETECT,gm,er;

int *p;

initgraph(&gd,&gm,"");

moveto(100,100);

linerel(30,0);

linerel(-10,10);

linerel(30,30);

linerel(-10,10);

linerel(-30,-30);

linerel(-10,10);

linerel(0,-30);

setfillstyle(2,9);

floodfill(105,105,WHITE);

int size=imagesize(100,100,150,150);

p=new[size];

getimage(100,100,150,150,p);

getch();

// putimage(250,200,p,0);

line(10,240,630,240);

line(320,10,320,470);

outtextxy(330, 0, "Y");

outtextxy(630, 250, "X");

outtextxy(310, 250, "0");

float t=0,

dt=0.01;

double r=100.0;

moveto(320,240);

sound(300);

while (t<=2*M_PI)

{

putimage(xe,ye,p,1);

x=r*pow(cos(t),2);

y=r*pow(sin(t),2);

xe=int(x+320);

ye=int(240-y);

putimage(xe,ye,p,1);

lineto(xe,ye);

t+=dt;

delay(10);

}

nosound;

getch();

closegraph();

}

 

 
 

 


Завдання 12-3: Написати программу, яка рухає малюнок по фігурі, у супроводі звукових ефектів

Програма:

#include<conio.h>

#include<math.h>

#include<dos.h>

#include<stdio.h>

#define ARROW_size 40

void draw_arrow (int x, int y);

int main (void)

{

int gdriver=DETECT, gmode, errorcode;

void*arrow;

int Y_dek,x_dek,x,y,maxx;

unsigned int size;

initgraph (&gdriver,&gmode,””);

errorcode=graphresult();

if (errorcode !=gr0k)

{

printf(“Graphics error: %s\n”,grapherrormsg(errorcode));

printf(“ Press any key to halt:”);

getch();

exit(1);

}

maxx=getmaxx();

x=0;

y=getmaxy()/5;

draw_arrow(x,y);

size=imagesize(x,y-ARROW_SIZE,x+(4*ARROW_SIZE), y+ARROW_SIZE);

arrow=malloc (size);

getimage (x,y-ARROW_SIZE, x+(4*ARROW_SIZE), y+ARROW_SIZE, arrow);

putimage( x,y-ARROW_SIZE, arrow, XOR_put);

float t=0.0, dt=0.01;

float r=100;

x_ek, y_ek;

moveto(r*pow(cos(t),3)+320,240-r*sin(t)*cos(t)*cos(t);

while(t<=9.0)

{

putimage(x_ek-100,y_ek-45, arrow, XOR_PUT);

x_dek=r*pow(cos(t),3);

y_dek=r*sin(t)*cos(t)*cos(t);

x_ek=(x_dek+320);

y_ek=(240-y_dek);

sound(6661299*(x_ek+(-y_ek)));

lineto (x_ek; y_ek);

putimage (x_ek-100; y_ek-45; arrow, XOR_PUT);

delay (1);

t=t+dt;

}

nosound ();

getch ();

free(arrow);

closegraph ();

return 0;

}

void draw_arrow (int x, int y)

{

line(20,240,620,240);

line (329,20,320,460);

moveto (50,50);

linerel(40,-40);



lude $_SERVER["DOCUMENT_ROOT"]."/cgi-bin/footer.php"; ?>