Sunteți pe pagina 1din 5

Ministerul Educaiei al Republicii Moldova

Universitatea Tehnic a Moldovei


Facultatea Calculatoare, Informatica, Microelectronica

Disciplina:Graficapecalculator

Raport
lalucrareadelaboratornr3
Tema : Desenarea graficelor pentru funcii

A elaborat : st. gr.TI-131 F/R


Cebotari Ion

A verificat : Lector Superior


Constantin Plotnic

Chiinu 2016
Scopul lucrrii: Obinerea cunotinelor practice n sintetizarea i afiarea graficelor funciilor n
baza bibliotecii grafice.

Sarcina lucrrii:

1. De a elabora un program pentru sintetizarea i afiarea graficelor funciilor conform


variantelor.
2. S se foloseasc transformarea fereastr-poart
3. De a prezenta imagini n diferite pori de vizualizare

Varianta 19.
Lista funciilor:

1. Y =2 sin(kx)
2
2. Z =Ax +Bx +C
3. W =cos(3 sin (kx))

Codul-surs al programului :
#include <stdlib.h>
#include <math.h>
#include <stdio.h>
#include <time.h>
#include <conio.h>
#include <graphics.h>

float Y(float x, float k ) {


return (2*sin(k * x));
}

float Z(float a, float b, float c, float x) {


return (a*x*x+b*x+c);
}

float W(float k, float x){


return (cos(3*sin(k*x)));
}

int fereastraPoartaX (int xp_min, int xp_max, float xf_min, float xf_max,
float xf ) {
float scaleX = (xp_max - xp_min)/(xf_max - xf_min);
float tx = xp_min-scaleX*xf_min;
return floor(xf * scaleX + tx);
}

int fereastraPoartaY (int yp_min, int yp_max, float yf_min, float yf_max, float
yf) {
float scaleY = (yp_max - yp_min)/(yf_max - yf_min);
float ty = yp_min-scaleY*yf_min;
return floor(yf * scaleY + ty);
}

void drawAxes( int x_min, int x_max, int y_min, int y_max ){
int width = x_max - x_min; int height = y_max - y_min;
line(x_min,floor(height/2 + y_min),x_min+width,y_min +
floor(height/2)); /* Linia OX*/
line(x_min + width-3,y_min + floor(height/2)-3,x_min + width,y_min +

Pag. 1
floor(height/2));
line(x_min + width-3,floor(height/2)+3+ y_min,x_min +
width,floor(height/2)+ y_min);
line(x_min + floor(width/2),y_min,x_min + floor(width/2),height+
y_min); /* Linia OY */
line(x_min + floor(width/2)-3,3+ y_min,x_min + floor(width/2),y_min);
line(x_min + floor(width/2)+3,3+ y_min,x_min + floor(width/2),y_min);
}

void drawMe (void) {


int k, originX, originY, scale, counter;
float x_min, x_max;
float temp;
x_min=-M_PI;x_max=M_PI;
settextstyle(SANS_SERIF_FONT,HORIZ_DIR,1);
outtextxy (100, 10, "Lucrarea Nr.3");
outtextxy (10, 30, "Desenarea graficelor pentru functii");
outtextxy (10, 100, "Elaborat de studentul");
outtextxy (10, 130, "GR TI 131 F/R Cebotari Ion");
outtextxy (10, 150, "Verificat de: Lector superior");
outtextxy (130, 180, "Constantin Plotnic");

//outtextxy(20,10,"X_min=-M_PI, X_max=M_PI, delta_X=0.1. K=2");


//outtextxy(20,30,"Poarta de vizualizare 1: Y=2sin(kx)");
//outtextxy(20,300,"Poarta de vizualizare 2: W=cos(3sin(kx)");
//outtextxy(300,50,"Poarta de vizualizare 3: Z=2X^2+X-2");
//outtextxy(300,70,"X_min = -5, X_max = 5, delta_X = 0.1");
k=2;

setcolor(WHITE); /*Drawing white X and Y axis*/


outtextxy(320,10,"Functia 1: Y=2sin(kx)");
outtextxy(360,26,"X_min=-PI, X_max=PI, K=2");
setlinestyle(SOLID_LINE,0,NORM_WIDTH);
drawAxes(320,640,60,240);
temp=x_min;
originX = fereastraPoartaX(320, 640, -M_PI, M_PI, 0);
originY = fereastraPoartaY(60, 240, -2, 2, 0);
outtextxy(fereastraPoartaX(320, 640, -M_PI, M_PI, -M_PI),originY,"-PI");
outtextxy(fereastraPoartaX(320, 640, -M_PI, M_PI, M_PI)-15,originY,"PI");
setlinestyle(SOLID_LINE,0,THICK_WIDTH);
setcolor(RED);
counter = 0;
moveto(fereastraPoartaX(320, 640, -M_PI, M_PI, -M_PI),fereastraPoartaY(60,
240, -2, 2, Y(-M_PI,k)));
while (temp <= x_max ) {
temp += 0.1;
lineto(fereastraPoartaX(320, 640, -M_PI, M_PI,
temp),fereastraPoartaY(60, 240, -2, 2,Y(temp,k)));
counter = counter + 1;
};

setcolor(WHITE); /*Drawing white X and Y axis*/


outtextxy(320,250,"Functia 2: W=cos(3sin(kx)");
outtextxy(360,266,"X_min=-PI, X_max=PI, K=2");
setlinestyle(SOLID_LINE,0,NORM_WIDTH);
drawAxes(320, 640, 300, 480);
originX = fereastraPoartaX(320, 640, -M_PI, M_PI, 0);
originY = fereastraPoartaY(300, 480,-1, 1, 0);
temp=x_min;

Pag. 2
outtextxy(fereastraPoartaX(320, 640, -M_PI, M_PI, -M_PI),originY,"-PI");
outtextxy(fereastraPoartaX(320, 640, -M_PI, M_PI, M_PI)-15,originY,"PI");
setlinestyle(SOLID_LINE,0,THICK_WIDTH);
setcolor(RED);
moveto(fereastraPoartaX(320, 640, -M_PI, M_PI,
-M_PI),fereastraPoartaY(300, 480,-1, 1, W(-M_PI,k)));
while (temp <= x_max ) {
temp += 0.1;
lineto(fereastraPoartaX(320, 640, -M_PI, M_PI,
temp),fereastraPoartaY(300, 480,-1, 1, W(temp,k)));
};

setcolor(WHITE); /*Drawing white X and Y axis*/


outtextxy(0,240,"Functia 3: Z=2X^2+X-2");
outtextxy(20,256,"X_min=-2, X_max=2");
x_min=-2;
x_max=2;
setlinestyle(SOLID_LINE,0,NORM_WIDTH);
scale=20;
drawAxes(0, 320, 280, 480);
originX=fereastraPoartaX(0, 320, -2, 2, 0);
originY=fereastraPoartaY(280, 480,-2.2, 8, 0);
temp=x_min;
outtextxy(fereastraPoartaX(0, 320, -2, 2, -2),originY,"-2");
outtextxy(fereastraPoartaX(0, 320, -2, 2, 2)-15,originY,"2");
setlinestyle(SOLID_LINE,0,THICK_WIDTH);
setcolor(RED);
moveto(fereastraPoartaX(0, 320, -2, 2, -2),fereastraPoartaY(280, 480,
-2.2, 8, Z(2, 1, -2,-2)));
while (temp <= x_max ) {
temp += 0.1;
lineto(fereastraPoartaX(0, 320, -2, 2, temp),fereastraPoartaY(280,
480, -2.2, 8, Z(2, 1, -2,temp)));
};
}
int main() {
int gd=DETECT, gm, errorcode;
time_t t;
srand ((unsigned) time(&t));
initgraph(&gd, &gm, "C:\\TC\\BGI");
/* read result of initialization */
errorcode = graphresult();
if (errorcode != grOk) /* an error occurred */{
printf("Graphics error: %s\n", grapherrormsg(errorcode));
printf("Press any key to halt:");
getch();
exit(1); /* terminate with an error code */
}
drawMe();
getch();
closegraph();
restorecrtmode();
return 0;
}

Pag. 3
Rezultatele:
1. Captura de ecran a graficelor funciilor sintezate:

Concluzii: Prin aceast lucrare au fost acaparate deprinderi practice legate de generarea graficelor
funciilor folosing biblioteca BGI. Folosing diferite valori are variabilelor A,B,C i k am putut
experimenta cu funciile date, observnd variabilitatea lor. Aa cum valorile funciilor
triginometrice sunt limitate de intervalurile [-1, 1] i [-2, 2], variabila k determin care va fi
perioada lor. Formulele prezentate n cadrul cursului de prelegeri Grafica pe Calculator de
Veaceslav Perju au un minus considerabil ele sunt destinate situatiei in care axa Y este orientat n
sus, deci originea ecranului e in punctul extrem de stnga jos. Din cauza c n biblioteca BGI
originea e amplasat n colul din stnga sus i Y crete n jos, graficele funciilor se primesc
inversate. Un alt program a fost realizat, n care formulele pentru transformarea fereastr-poart au
fost adaptate pentru biblioteca BGI. El va fi prezentat aparte de aceast lucrare.

Pag. 4