Ministerul Educaţiei al Republicii Moldova Universitatea Tehnică a Moldovei Facultatea Calculatoare, Informatică şi Microelectronică Catedra Automatică și Tehnologii Informaționale
Lucrare de laborator Nr. 3 la disciplina
Grafica pe calculator Tema: „Desenarea graficelor funcțiilor utilizînd algoritmul fereastră/poartă fereastră/poartă”
Elaborat de:
St. gr. AI-121,
Șveț Sergiu Lect.sup.,
Controlat de:
Plotnic Constantin
Chişinău 2014
Scopul lucrării:
Obţinerea cunoştinţelor practice în realizarea transformărilor geometrice 2D şi 3D a imaginilor Sarcina lucrării :
1.
De a elabora un program pentru sintezarea şi afişarea graficelor funcţiilor conform variantelor (tabela 1)
2.
Să se folosească transformarea fereastră - poartă.
Varianta: Y = arccos(x) Codul sursă
#include
#include #include #include #include #include #include #include using namespace std; float XFm,YFm,XFM,YFM; int XPm,YPm,XPM,YPM; float Sx,Sy,Tx,Ty;
//--------------------------Initial functions---------------------------------// float f1(float x){ return acos(x); } //----------------------Window initialization---------------------------------// void WindowInit(float x1,float y1, float x2, float y2){ XFm=x1; YFm=y1; XFM=x2; YFM=y2; } //------------------------Transform window/port-------------------------------// void TransformWG(){ if(XFM>XFm&&YFM>YFm){ Sx=(XPM-XPm)/(XFM-XFm); Sy=(YPM-YPm)/(YFM-YFm); Tx=-Sx*XFm+(XPM-XPm-Sx*(XFM-XFm))/2; Ty=YPm-Sy*YFm+(YPM-YPm-Sy*(YFM-YFm))/2; } else Sx=Sy=Tx=Ty=0; } //--------------------------Port initialization-------------------------------// void Port(int x1,int y1,int x2,int y2) { XPm=x1; YPm=y1; XPM=x2;
YPM=y2; TransformWG(); setviewport(x1,y1,x2,y2,1); }
//--------------------------Transform of coeficients--------------------------// int Xdisplay(float xf) {return (int)(xf*Sx+Tx);} int Ydisplay(float yf) {return (int)(YPM-(yf*Sy+Ty));} int XPmin,YPmin, XPmax,YPmax; //-----------------------Drawing the system of coordinates--------------------// void DrawSystem(float Xmin,float Xmax,float Ymin, float Ymax){ setlinestyle(DASHED_LINE,1,1); moveto(Xdisplay(Xmin),Ydisplay(0)); lineto(Xdisplay(Xmax),Ydisplay(0)); moveto(Xdisplay(0),Ydisplay(Ymin)); lineto(Xdisplay(0),Ydisplay(Ymax)); outtextxy(getmaxx()/2-20, 0, "y"); outtextxy(getmaxx()-30, getmaxy()/2-30, "x"); } //-------------------------Full Drawing---------------------------------------// void Graphic(float Xmin,float Xmax,float Ymin, float Ymax,float pas,float (*f)(float),int XPmin,int YPmin,int XPmax,int YPmax){ float x,y; WindowInit(Xmin,Ymin,Xmax,Ymax); Port(XPmin,YPmin,XPmax,YPmax); DrawSystem(Xmin,Xmax,Ymin,Ymax); setlinestyle(SOLID_LINE,1,1);
for(x=Xmin+pas;x
Rezultatul execuției
Concluzie
În urma efectuării acestei lucrări de laborator am a flat cum pot fi desenate graficele funcțiilor în C++. Pentru aceasta există un algoritm denumit Fereastră/Poartă. Cu ajutorul lui poate fi desenat orice grafic al funcțiilor.