Sunteți pe pagina 1din 4

Ministerul Educaţiei al Republicii Moldova

Universitatea Tehnică a Moldovei


FACULTATEA CALCULATOARE, INFORMATICA,
MICROELECTRONICA

Raport
Lucrare de Laborator Nr. 2
LA DISCIPLINA “GRAFICA PE CALCULATOR”

Tema : TRANSFORMĂRI GEOMETRICE 2D


Varianta 5

A efectuat : Boaghi Dumitru,


st. Gr. TI-161 FR

A verificat: V. Moraru,

Chişinău 2018
Scopul lucrării:
Realizarea pratica a transformărilor geometrice bidimensionale.

Sarcina lucrării:

- De elaborat un program pentru rotire, scalare și translație a obiectelor în plan:


1) De desenat un triunghi de culoarea R și un pătrat de culoarea S. De ales dimensiunile și
pozițiile convenabile pentru vizualizare.
2) De realizat transformările elementare asupra pătratului în conformitate cu datele variantei.
De colorat figura transformată în culoarea R. Pentru realizarea transformărilor de folosit
exclusiv metodele specializate Rotirea se va efectua în jurul unui punct la alegere
3) De împărțit ecranul în 4 zone egale și de reprezentat în fiecare dintre ele: imaginea
originala, imaginea cu pătratul rotit, imaginea cu pătratul scalat, imaginea cu translație a
pătratului.

Datele: Unghiul de rotire-120; Coeficientul de scalare – 0.8; Translarea – 100, 100;

Codul:
#include <graphics.h>
#include <stdio.h>
#include <conio.h>
#include <dos.h>
#include <math.h>
#include <iostream>
#include <windows.h>

int cul;
using namespace std;
class patrat {
public:
int tab[10];
int ini1, ini2;

void scal(int *s, int x, int y, int z) {


int mx = 0;
int my = 150;

for (int k=0; k<10; k+=2) {


tab[k]= mx + ((int)(s[k] - x) * 0.8 + x);
tab[k+1]=my + ((int)(s[k+1] - y) * 0.8 + y);
}

drawpoly(5,tab);
setfillstyle(1,cul);
floodfill(tab[0]+1,tab[1]+1, WHITE);
}

void rot(int *s,int x,int y,double i,int z) {


int mx = 500;
int my = 0;
for (int k=0;k<10;k+=2) {
tab[k]=(int)((s[k] - x) * cos(i) - (s[k + 1] - y) * sin(i) + x);
tab[k+1]=(int)((s[k] - x) * sin(i) + (s[k + 1] - y) * cos(i) + y);
}
drawpoly(5,tab);
setfillstyle(1,cul);
}

void depl(int *s, int depx, int depy) {


int mx = 500;
int my = 150;

for(int k=0; k<10; k+=2) {


tab[k] = mx + s[k] + depx;
tab[k+1] =my + s[k+1] + depy;
}

drawpoly(5, tab);
setfillstyle(1, cul);
floodfill(tab[0] + 1, tab[1] + 1, WHITE);
}
};

int main() {
initwindow(900,700,"Exe");
patrat p;
int maxx, maxy, a=450, b=400;
double i=(120 * 3.1415)/180;/*unghi de rotire*/
int depx = 100;
int depy = 100;
int x[10];
int tabel[8]={400, 150, 500, 25, 300, 25, 400, 150};

drawpoly(4,tabel);//Desenam triunghiul
setfillstyle(1,GREEN);
floodfill(400,100,WHITE);
cul=getpixel(400,100);

int k;
int s[10]={100, 250, 150, 250, 150, 300, 100, 300, 100, 250};

drawpoly(5, s);//Desenam patratul fix


setfillstyle(1,1);
floodfill(110,260,WHITE);

while(true){
outtextxy(10, 10, "1 - Scalarea");
outtextxy(10, 30, "2 - Deplasarea");
outtextxy(10, 50, "3 - Rotatia");

switch(getch()) {
case '1':
p.scal(s, a, b, k);
break;
case '2':
p.depl(s, depx, depy);
break;
case '3':
p.rot(s, a, b, i, k);
break;
default:
return 0;
}
}
getch();

return 0;
}

Rezultate

Concluzii:

În urma efectuării acestei lucrări practice, am perfectionat lucrul cu biblioteca BGI, în lucrului
cu poziționarea elementului.

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