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:
A verificat:

studentul
grupa:
profesoara: Plotnic Constantin

Chiinu 2008
Scopul lucrrii: Obinerea cunotinelor practice n sintezarea i afiarea graficelor
funciilor n baza bibliotecii grafice a oricrui limbaj de programare (Pascal, C++, ori Java)
Consideraii teoretice:

Orice lucru n regim grafic se ncepe cu iniializarea modului grafic care se face cu ajutorul functiei
InitGraph(GraphDriver,GraphMode) funcia stabilete valorile implicite ale parametrilor de operare
n mod grafic i incarc de pe disc n memorie modulul driver corespunztor primului parametru. Modul
de lucru al driver-ului ncarcat este specificat prin al doilea parametru, iar denumirea complet a cii unde
se va cauta fiierul .BGI corespunztor este prezentat prin al treilea parametru. nchiderea modului se
face cu : Closegraph funcia efectuiaz revenirea n mod text , modului implicit de lucru a sistemului
de afiare. Ea apeleaz funcia 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) funcia dat deseneaz un poligon cu numrul de vrfuri n i coordonatele m.
setfillstyle(n,m) funcia dat definete 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

Condiia problemei:
1.
2.
3.
4.
5.

De a elabora un program pentru sintezarea i afisarea graficelor funciilor conform variantelor


(tabelaL1)
Se folosesc metode de aproximare (tema 13)
Figurile sintezate s fie descrise
De a salva i restaura imagini n/din fisiere
De a prezenta imagini n diferite pori 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: Efectund lucrarea dat am facut cunotin cu bazele graficii n limbajul C++, am
fcut cunotin cu funciile de desenare graficelor i totodat am repetat unele elemente din primul
laborator.