Sunteți pe pagina 1din 4

Ministerul Educatiei şi Ştiintei al Republicii Moldova

UNIVERSITATEA TEHNICĂ DIN MOLDOVA


Catedra Electronică

Referat
La Grafica pe calculator
Lucrarea de laborator Nr 2

Tema: Sinteza Figurilor Grafice

A efectuat: studentul
grupa:

A verificat: profesoara: Plotnic Constantin

Chişinău 2008
Scopul lucrării: Obţinerea cunoştinţelor practice în sintezarea şi afişarea graficelor
funcţiilor în baza bibliotecii grafice a oricărui limbaj de programare (Pascal, C++, ori Java)
Consideraţii teoretice:
Orice lucru în regim grafic se începe cu iniţializarea modului grafic care se face cu ajutorul functiei
InitGraph(GraphDriver,GraphMode) – funcţia stabileşte valorile implicite ale parametrilor de operare
în mod grafic şi incarcă de pe disc în memorie modulul driver corespunzător primului parametru. Modul
de lucru al driver-ului încarcat este specificat prin al doilea parametru, iar denumirea completă a căii unde
se va cauta fişierul .BGI corespunzător este prezentată prin al treilea parametru. Închiderea modului se
face cu : Closegraph – funcţia efectuiază revenirea în mod text , modului implicit de lucru a sistemului
de afişare. Ea apelează funcţia graphfreemen pentru a elibera memoria ocupată de driver-ulgrafic, setul
sau seturile de caractere utilizate de program precum şi zonele de memorie interne.

Line(x1,y1,x2,y2) – functia afiseaza o linie intre punctele de coordonate (x1,y1) si (x2,y2), specificate
ca parametri.
Drawpoly(n,m) – funcţia dată desenează un poligon cu numărul de vîrfuri n şi coordonatele m.
setfillstyle(n,m) – funcţia dată defineşte culoarea şi stilul în care va fi colorată figura
bard3d(int left, int top, int right, int bottom, int drepht, int topflag ) – deseană dreptunghi în plan
tridimensional

Condiţia problemei:
1. De a elabora un program pentru sintezarea şi afisarea graficelor funcţiilor conform variantelor
(tabelaL1)
2. Se folosesc metode de aproximare (tema 13)
3. Figurile sintezate să fie descrise
4. De a salva şi restaura imagini în/din fisiere
5. De a prezenta imagini în diferite porţi de vizualizare
Y  (0.5) x ; z  x4 ; W  cos(k  x)  2

Textul programului:
#include <iostream.h>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <graphics.h>
#include <alloc.h>
#include <math.h>
#include <fstream.h>
float k;
void Grafic(float xfmin,float xfmax,float yfmin,float yfmax,int xpmin,int xpmax,int ypmin,int ypmax,float a,float b,float pas,int
n,int culoare);
void D120();
//................................
void main(void)
{ clrscr();
int func1=1,func3=0,q=1,i,x,w=1,qq;
int y=50;
int gdriver = DETECT, gmode, errorcode;
initgraph(&gdriver, &gmode, "");
errorcode = graphresult();
if (errorcode != grOk)
{
printf("Graphics error: %s\n", grapherrormsg(errorcode));
printf("Press any key to halt:");
getch();
exit(1);
}
printf("\r \n Introdu k=");
cin>>k;
D120();
getch();
ofstream f2;
f2.open("D:\\temp\\fisier_graf.txt");
if(!f2)
{
clrscr();
cout<<"\n Fisierul nu a putut fi deschis"<<endl;
exit(1);
}
for( i=0;i<640;i++)
for( int j=0;j<480;j++)
f2<<getpixel(i,j)<<" ";
f2.close();
cleardevice();
ifstream f1;
int k;
f1.open("D:\\temp\\fisier_graf.txt");
if(!f1)
{getch();
cout<<"\n Fisierul nu a putut fi deschis";
exit(1);
}
for( i=0;i<640;i++)
for( j=0;j<480;j++)
{
if(!f1.eof())
f1>>k;
putpixel(i,j,k);
}
f1.close();
getch();
closegraph();
}

//-----------------------------------
void D120()
{
cleardevice();
setcolor(15);
rectangle(10,10,630,470);
line(320,10,320,470);
line(10,240,630,240);
setviewport(10,10,320,240,1);
Grafic(-6.28,6.28,-5,5,10,320,10,240,-6,6,0.01,0,13);
setviewport(320,10,630,240,1);
Grafic(-6.28,6.28,-5,5,10,320,10,240,-6,6,0.01,1,4);
setviewport(10,240,320,470,1);
Grafic(-6.28,6.28,-5,5,10,320,10,240,-6,6,0.01,2,14);
setviewport(320,240,630,470,1);
Grafic(-6.28,6.28,-5,5,10,320,10,240,-6,6,0.01,3,9);
setviewport(0,0,639,479,1);
}
//-----------------------------------
void Grafic(float xfmin,float xfmax,float yfmin,float yfmax,int xpmin,int xpmax,int ypmin,int ypmax,float a,float b,float pas,int
n,int culoare)
{
float Sx,Sy,tx,ty,xf,yf,func;
int xp,yp;

// calculam parametrii Sx, Sy , tx , ty


if(n!=0)
{
Sx=(xpmax-xpmin)/(xfmax-xfmin);
Sy=(ypmax-ypmin)/(yfmax-yfmin);
if(Sx<Sy)Sy=Sx;
else
Sx=Sy;
tx=xpmin-Sx*xfmin+(xpmax-xpmin-Sx*(xfmax-xfmin))/2;
ty=ypmin-Sy*yfmin+(ypmax-ypmin-Sy*(yfmax-yfmin))/2;
}
//desenam graficele functiilor in dependeta de parametrul de intrare n
setcolor(15);
switch(n){
case 0:{setcolor(7);
outtextxy(130,30,"* * *");
outtextxy(10,60,"Laboratorul efectuat de Palii Valeriu");
outtextxy(70,100,"Student gr.ISBM-061");
outtextxy(110,150,"UTM,FCIM");
outtextxy(110,165,"--------");
break;}
case 1:{outtextxy(190,20," y=pow(0.5,x)");
outtextxy(150,10,"y");
outtextxy(155,132,"0");
outtextxy(295,130,"x");break;}
case 2:{outtextxy(30,200," y=pow(x,4)");
outtextxy(150,10,"y");
outtextxy(155,132,"0");
outtextxy(295,130,"x");break;}
case 3:{outtextxy(30,200," y=cos(k*x)+2");
outtextxy(150,10,"y");
outtextxy(155,132,"0");
outtextxy(295,130,"x");break;}
default:{goto A;}
}

xf=a;
switch(n){
case 1:{func=pow(0.5,xf);break;}
case 2:{func=pow(xf,4);break;}
case 3:{func=cos(k*xf)+2;break;}
}

xp=xf*Sx+tx;
yp=ypmin+ypmax-(func*Sy+ty);
moveto(xp,yp);

xf+=pas;
setcolor(4);
while(xf<b){
xp=xf*Sx+tx;

switch(n){
case 1:{func=pow(0.5,xf);break;}
case 2:{func=pow(xf,4);break;}
case 3:{func=cos(k*xf)+2;break;}
}
yp=ypmin+ypmax-(func*Sy+ty);
lineto(xp,yp);
xf+=pas;
}
//desenam coordonatele
if(n!=0)
{
A:setcolor(6);
line(xpmin+(xpmax-xpmin)/2,ypmin,xpmin+(xpmax-xpmin)/2,ypmax);
setcolor(6);
line(xpmin,ypmin+(ypmax-ypmin)/2,xpmax,ypmin+(ypmax-ypmin)/2);
}
}

Concluzii: Efectuînd lucrarea dată am facut cunoştinţă cu bazele graficii în limbajul C++, am
făcut cunoştinţă cu funcţiile de desenare graficelor şi totodată am repetat unele elemente din primul
laborator.

S-ar putea să vă placă și