Limbajul c si C++ abc-doar



Yüklə 4,6 Mb.
səhifə29/55
tarix07.05.2018
ölçüsü4,6 Mb.
#50260
1   ...   25   26   27   28   29   30   31   32   ...   55

c=300+n*10;

d=250+n*10;

e=50+n;

f=1;

bar3d(a,b,c,d,e,f);

bar3d(d,c,b,a,e,f);

sleep(1);

cleardevice();

}}
FUNCTIA clearviewport()

-functia sterge desenul de pe ecran si deplaseaza cursorul la pozitia 0,0

SINTAXA GENERALA este:

void far clearviewport(void);

Functia sterge desenul de pe ecran (viewport) si apoi returneaza pozitia

cursorului la pozitia 0,0 (relativ la modul ecran in care a revenit).

Se deosebeste de cleardevice() care umple ecranul in culoarea de fond.

Functia nu returneaza nici o valoare.

EXEMPLU: (vezi closegraph())
FUNCTIA closegraph()

-sterge modul grafic al ecranului si revine la modul de afisare anterior

SINTAXA GENERALA este: void far closegraph(void);

Functia dealoca memoria alocata pentru modul grafic al ecranului si apoi

reinstaleaza modul ecran existent inainte de initializarea cu initgraph().

Pentru dealocarea memoriei apeleaza _graphfreemem().

Functia nu returneaza nici o valoare.

Se utilizeaza pentru a jongla intre modul text si modul grafic de afisaj.

-206- [ graphics.h - detectgraph() ]

EXEMPLU: #include

#include

#include

int *drv,*mod;

int a=40,b=50,c=60,d=70,e=20,f=10;

main()

{

printf("EXEMPLU DE GRAFIC 3D: \n\n";

sleep(3);

drv=DETECT;

initgraph(drv,mod,"");

bar3d(a,b,c,d,e,f);

sleep(3);

clearviewport();

printf("Text in modul grafic al ecranului: \n\n");

sleep(3);

closegraph();

printf(" Revenire la modul text al ecranului: \n\n");

sleep(3);

}
FRUNCTIA detectgraph()

-detecteaza adaptorul grafic si alege modul grafic optim

SINTAXA GENERALA este:

void far detectgraph(int far *graphdriver,int far *graphmode);

Functia detecteaza adaptorul grafic instalat (placa video) si alege

modul grafic care asigura rezolutia cea mai mare pentru adaptorul iden-

tificat(modul grafic cu numarul maxim de pixeli suportat de adaptor).

Daca nu este detectat nici un adaptor grafic,*graphdriver este setat la

grNotDetected(-2).

Variabila graphdriver contine un numar intreg care specifica tipul de

adaptor grafic dupa cum urmeaza: 0 (DETECT) 1 GCA 2 MCGA 3 EGA 4 EGA64

5 EGAMONO 6 IBM8514 7 HERCMONO 8 ATT400 VGA 9 PC3270 10 preluata din

constanta graphics_drivers definita in graphics.h sau setata de catre

utilizator.

Variabila graphmode contine tot un numar intreg care specifica modul

grafic actual si este preluat din constanta graphics_mode sau poate fi

setat de catre utilizator dupa cum urmeaza: CGA (0-4) MCGA(0-5) EGA(0-1)

EGA64(0-1) EGAMONO (3) HERC (0) ATT400(0-5) VGA(0-2) PC3270(0) IBM8514(0)

(vezi si constanta graphics.mode)

Functia se utilizeaza mai ales atunci cand utilizatorul doreste sa spe-

cifice expres un anumit mod grafic,diferit de cel detectat si setat auto-

mat.Nu se recomanda sa alegeti modul grafic la intamplare.Daca nu stiti

exact ce doriti sa faceti,utilizati optiunea DETECT.

Functia nu returneaza nici un fel de eroare.

Modurile grafice diferite oscileaza intre una si doua pagini cu dimensiuni

cuprinse intre 320/200 si 1024/768 pixeli si respectiv o paleta de culori

cuprinsa intre 2(monocrom) si 265 de culori (IBM8514LO).

Functia alege automat modul grafic cu rezolutia cea mai mare care este

compatibila cu adaptorul grafic si nu se recomanda schimbarea setarilor

automate decat daca rulati un program care necesita o alta rezolutie.


-207- [ graphics.h - drawpoly() ]

EXEMPLU: #include

#include

#include

int far *drv,*mod;

char far *nume,*modecran;

int a,b,c,d;

main()

{

drv=DETECT;

detectgraph(drv,mod);

initgraph(drv,mod,"");

nume=getdrivername();

modecran=getmodename(0);

printf(" programul grafic instalat este: %d \n",drv);

printf(" adica:%s\n\n",nume);

printf(" modul grafic este: %d \n",mod);

printf(" adica: %s \n\n",modecran);

for (a=100;a<120;a++)

{ b=a+20;

c=2*a;

d=150-a;

circle(b,c,d);

sleep(1);

}}
FUNCTIA drawpoly()

-deseneaza un poligon

SINTAXA GENERALA este:

void far drawpoly(int numpoints,int far *polypoints);

Functia deseneaza un poligon cu numarul de puncte specificat prin num-

points si respectiv cu coordonatele fiecarui punct arhivate in aria de

date spre care pointeaza pointerul *polypoints.Aria de date trebuie sa

contina un numar dublu de variabile fata de numarul de puncte specificate

prin numpoints,fiecare dintre ele continand un numar de tip int (pentru

fiecare coordonata x si y a fiecarui punct trebuie sa existe in aria de

date un numar de tip int).Fiecare pereche succesiva de numere din aria

polypoints va forma coordonatele unui punct al poligonului.Atunci cand

doriti ca poligonul sa formeze o figura inchisa (un poliedru) trebuie ca

sa va asigurati ca fiecare coordonata a ultimului punct definit este

identica cu cea a primului punct definit.

Functia nu returneaza nici o valoare.

Poligonul va fi desenat in culoarea si/sau cu stilul penitei.Daca doriti

sa formati o figura geometrica inchisa si sa umpleti cu culoare spatiul

interior,puteti sa utilizati functia fillpoly().

Daca generati polinoame aleatorii trebuie sa definiti punctele din

aria de date (polypoints) astfel incat numarul coordonatelor sa fie dublu

decat cel al punctelor solicitate si respectiv doua puncte diferite sa

nu fie definite cu aceleasi coordonate (cu exceptia primului si a ulti-

mului).Eventual se pot utiliza formule aleatorii pentru fiecare punct de

coordonata sau se pot realiza algoritmi elementari care realizeaza grafica

animata,desene animate,etc...


-208- [ graphics.h - ellipse() ]

EXEMPLU: #include

#include

int *drv,*mod,a,b[25],x;

main()

{

drv=DETECT;

initgraph(drv,mod,"");

for (a=0;a<5;a++)

{ b[a]=a+10*a;

b[2*a]=a+20*a;

b[3*a]=200-5*a;

b[4*a]=300-7*a;

b[5*a]=400-10*a;

}

for(x=1;x<11;x++)

{ setcolor(x);

cleardevice();

slellp(1);

drawpoly(x,b);

sleep(2);

}

}

In exemplul de mai sus,punctele de coordonate din aria de date b[25] sunt

generate prin functii.Pentru a intelege cat mai bine modul de reprezentare

al fiecarui punct,definiti punctlele de coordonate punct cu punct.Apoi

incercati sa definiti si sa afisati unul sau mai multe poliedre.

FUNCTIA ellipse()

-deseneaza un arc de elipsa sau o elipsa intreaga

SINTAXA GENERALA este:

void far ellipse(int x,int y,int stangle,int endangle,int xrad,int yrad);

unde: x si y sunt coordonatele centrului,stangle si endangle sunt arcul

de pornire si respectiv cel de terminare al desenului(exprimate in grade)

iar xrad si y rad sunt axa orizontala si respectiv axa verticala a elipsei.

Functia deseneaza un arc de elipsa incapand din punctul stangle si termi-

nand cu punctul endangle.Daca stangle este zero iar endangle este 360,se

va desena o elipsa intreaga.Graficul rezultat este desenat in sens invers

fata de sensul de rotatie al acelor de ceasornic iar punctul zero este

considerat la ora 3,punctul de 90 de grade este la ora 12...etc.

Desenul nu este influentat de stilul penitei ci doar de grosimea sa.

Functia nu returneaza nici o valoare.

Pentru a calcula punctele de focar se va utiliza teorema lui Pitagora.

Elipsa va fi desenata in culoarea si stilul penitei.Pentru a desena

elipse cu imaginea interioara umpluta in culoarea de scriere se poate

utiliza functia fillellipse().

Cand utilizati imagini grafice care combina mai multe elipse,trebuie sa

calculati coordonatele fiecarui punct,pentru a evita suprapunerile(spre

deosebire de functia arc() care poate apela functia getarccoord() pentru

a calcula automat coordonatele punctului final al graficului).

Functia se poate utiliza pentru a desena orbita corpurilor cersti etc...


-209- [graphics.h -fillellipse() ]

EXEMPLU: #include

#include

#int a,b,c,d,e,f,x;

int *drv,*mod;

main()

{

drv=DETECT;

initgraph(drv,mod,"");

for (x=1;x<30;x++)

{ a=200+x*5;

b=200+x*5;

c=x*15;

d=x*30;

e=100;

f=150;

ellipse(a,b,c,d,e,f);

sleep(1);

}

}
FUNCTIA fillellipse()

-deseneaza o elipsa si o umple cu culoarea penitei

SINTAXA GENERALA este:

void far fillellipse(intx,int y,int xradius,int yradius);

Functia deseneaza o elipsa cu centrul in punctul cu coordonatele x si y

si cu axa orizontala de raza xradius iar cu axa verticala de raza yradius

si apoi umple spatiul interior in culoarea penitei.

Functia nu returneaza nici o valoare.

EXEMPLU: #include

#include

#include

int a,b,c,d,x;

int *drv,*mod;

main()

{

randomize();

drv=DETECT;

initgraph(drv,mod,"");

for (x=1;x<16;x++)

{ a=random(300)+100;

b=random(300)+100;

c=random(200);

d=random(200);

setcolor(x);

setbkcolor(x-1);

fillellipse(a,b,c,d);

sleep(1);

}}

Functia se poate utiliza pentru grafice,desene animate etc. si poate fi

generata cu usurinta in rutine automate.Se utilizeaza mai mult pentru a

exemplifica si cuantifica decat pentru a desena traictorii sau orbite.


-210- [ graphics.h -fillpoly-floodfill() ]

FUNCTIA fillpoly()

-deseneaza un poligon si umple spatiul interior in culoarea penitei

SINTAXA GENERALA este:

void far fillpoly(int numpoints,int far *polypoints);

Functia este similara cu drawpoly() dar umple spatiul interior in culaorea

si stilul penitei.Regulile de definire a punctelor si coordonatelor sunt

similare (vezi drawpoly()).Nu returneaza nici o valoare.

EXEMPLU: #include

#include

int a,b[16];

int *drv,*mod;

main()

{

drv=DETECT;

initgraph(drv,mod,"");

a=6;

b[0]=75,b[1]=100;

b[2]=210,b[3]=180;

b[4]=80,b[5]=200;

b[6]=80,b[7]=350;

b[8]=470,b[9]=270;

b[10]=250,b[11]=75;

b[12]=100;

fillpoly{a,b);

sleep(7); }

Incercati sa desenati si sa deplasati un poligon cu 5 laturi.
FUNCTIA floodfill()

-umple cu culoare spatiul centrat de punctul x,y si delimitat prin border

SINTAXA GENERALA este: void far floodfill(int x,int y,int border);

Functia umple in culoarea si cu stilul penitei spatiul centrat de punctul

desemnat prin x si y (pixelul cu coordonatele respective) si delimitat

prin linii de tipul celei specificate prin border(in culoarea respectiva).

Daca punctul x,y este in interiorul unei arii inchise,se va colora tot

interiorul ariei respective,iar daca punctul x,y este in afara ariei

delimitate prin border atunci se va colora tot exteriorul ariei respective

Se va prefera functia fillpoly() ori de cate ori este posibil pentru a

asigura compatibilitatea cu versiunile viitoare de program si pentru a

desemna mai sigur poligoanele ce urmeaza sa fie colorate.Functia nu poate

fi apelata de catre driverul IBM-8514.In caz de eroare returneaza codul -7.

EXEMPLU: #include

#include

int a=250,b=200,c=75,*drv,*mod;

main()

{ drv=DETECT;

initgraph(drv,mod,"");

circle(a,b,c);

floodfill(a,b,15);

sleep(3);

floodfill(5,5,15);

sleep(3); }


-211- [ graphics.h-arc() si getarccoords()]

FUNCTIA arc()

-deseneaza un arc de cerc

SINTAXA GENERALA este:

void far arc(int x,int y,int stangle,int endangle,int radius);

unde: x si y sunt coordonatele centrului cercului,stangle este unghiul de

la care incepe arcul de cerc iar endangle este unghiul la care se termina

si radius este raza cercului.Daca stangle este zero si endangle este 360

functia va desena un cerc complet.Desenul este derulat in sens invers

acelor de ceasornic cu unghiul de 0 grade situat la ora 3,90 grade la ora

12 etc.Desenul rezultat este influentat de rezolutia ecranului si de

dimensiunile fiecarui pixel (in functie de modul grafic si de placa grafi-

ca utilizata).Este posibil ca desenul rezultat sa nu reprezinte un cerc

sau un arc de cerc perfect(in cazul pixelilor dreptunghiulari).In modul

VGA,pixelii sunt patrati iar imaginea rezultata este realista.

Functia nu returneaza nici o valoare.

EXEMPLU: #include

#include

int *drv,*mod;

int a=100,b=250,c=10,d=270,e=50;

main()

{

drv=DETECT;

initgraph(drv,mod,"");

arc(a,b,c,d,e);

sleep(5);

}
FUNCTIA getarccoords()

-citeste coordonatele unui arc de cerc

SINTAXA GENERALA este:

void far getarccoords(struct arccoordstype far *arccoords);

Functia citeste coordonatele grafice pentru ultimul arc de cerc desenat

si le salveaza intr-o structura special definita in graphics.h de tipul

arccoordstype cu forma generala:

struct arccoordstype {

int x,y;

int xstart,ystart,xend,yend;

}

unde x si y sunt coordonatele centrului iar xstart,ystart,xend si yend

sunt coordonatele punctelor de inceput si de terminare a arcului de cerc.

Functia nu returneaza nici o valoare.

Functia este foarte utila atunci cand se realizeaza constructii grafice

mai complicate in care doriti ca o linie sau un poligon sa intersecteza

una dintre extremele unui arc de cerc sau cand doriti sa utilizati unul

dintre extremele arcului de cerc pentru a genera o noua figura geometrica

(de exemplu un lant de arcuri de cerc in care centrul fiecarui arc este

situat in punctul terminal al arcului precedent etc.)

Functia se poate utiliza si pentru o orientare sumara in calculul unor

orbite elementare sau al unor miscari circulare,pentru reprezentarea

grafica a momentelor de forta etc.Functia se poate apela atat pentru

arcurile de tip arc() cat si pentru cele de tip ellipse().


-212- [ graphics.h-getaspectratio() ]

EXEMPLU: #include

#include

int *drv,*mod;

int a=400,b=250,c=10,d=120,e=20,x;

struct arccoordstype info;

main()

{

drv=DETECT;

initgraph(drv,mod,"");

for(x=1;x<15;x++)

{

ellipse(a,b,c,d,e,x);

arc(a,b,c,d,e);

getarccoords(&info);

printf("arcul incepe la: x=%d y=%d \n",info.xstart,info.ystart);

printf(" si se termina la: x=%d y=%d \n",info.xend,info.yend);

a=info.xend,b=info.yend;

c=info.xstart,d=info.ystart;

sleep(3);

}}

Observati cum centrul arcului descris se deplaseaza in punctul terminal

al arcului precedent.
FUNCTIA getaspectratio()

-citeste raportul grafic global

SINTAXA GENERALA este:

void far getaspectratio(int far *xasp,int far *yasp);

unde: xasp si yasp sunt factorii de aspect grafic pentru cele doua coordo-

nate ale ecranului (Ox si Oy).

Factorul *yasp este normalizat la 10000.La toate placile grafice(cu excep-

tia celor de tip VGA) factorul *xasp este mai mic decat 10000 deoarece

fiecare pixel este dreptunghiulat(mai inalt decat lat).La adaptoatele VGA

fiecare pixel este patrat si cei doi factori sunt egali.

Relatia generala dintre cei doi factori de aspect este de tipul:

*yasp=10000

*xasp<=10000

iar aspectul general este determinat de raportul dintre yasp si xasp.

Functia nu returneaza nici o valoare.

EXEMPLU: #include

#include

#include

int *drv,*mod,asx,asy;

main()

{ drv=DETECT;

initgraph(drv,mod,"");

getaspectratio(&asx,&asy);

printf("Raportul grafic/pixel este: %d/%d \n",asx,asy);

printf("Aspectul grafic al unui pixel(marit 100x100) este:\n");

bar(asx/100,asy/100,asx/100+asx/100,asy/100+asy/100);

sleep(5);

}


-213- [graphics.h -getbkcolor(),getcolor()]

FUNCTIA getbkcolor()

-returneaza culoarea de fond a ecranului

SINTAXA GENERALA este: int far getbkcolor(void);

Functia citeste si returneaza culoarea de fond a ecranului sub forma de

cod numeric (0-15) dupa codurile din tipul COLORS definit in graphics.h

( 0= BLACK 1=BLUE 2=GREEN 3=CYAN 4=RED 5=MAGENTA 6=BROWN 7=LIGHTGRAY

8=DARKGRAY 9=LIGHTBLUE 10=LIGHTGREEN 11=LIGHTCYAN 12=LIGHTRED 13=LIGHT-

MAGENTA 14=YELLOW 15=WHITE )

Functia returneaza codul culorii de fond a ecranului.

EXEMPLU: #include

#include

#include

int *drv,*mod;

int n,k;

main()

{

drv=DETECT;

initgraph(drv,mod,"");

for (n=0;n<16;n++)

{

setbkcolor(n);

k=getbkcolor();

printf("Culoarea de fond este: %d \n\n",k);

sleep(1);

}}
FUNCTIA getcolor()

-returneaza culoarea de scriere a penitei

SINTAXA GENERALA este: int far getcolor();

Functia returneaza valoarea la care sunt setati pixelii utilizati pentru

trasarea de linii sau imagini grafice.Valoarea este influentata de modul

grafic utilizat.Valoarea returnata este codul numaric al culorii din

paleta grafica utilizata.

Functia returneaza codul numeric al culorii utilizate pentru desenare.

EXEMPLU: #include

#include

#include

int *drv,*mod;

int n,k;

main()

{ drv=DETECT;

initgraph(drv,mod,"");

for (n=0;n<16;n++)

{ setcolor(n);

circle(300,200,25);

k=getcolor();

printf("Culoarea penitei grafice este: %d \n",k);

sleep(1);

}}

In functie de modul grafic utilizat,si de paleta grafica (0,1,2,3) codul

returnat va cuprinde 4,16 sau 256 de culori(IBM8514).


Yüklə 4,6 Mb.

Dostları ilə paylaş:
1   ...   25   26   27   28   29   30   31   32   ...   55




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©muhaz.org 2024
rəhbərliyinə müraciət

gir | qeydiyyatdan keç
    Ana səhifə


yükləyin