Sunteți pe pagina 1din 7

Ministerul Educaiei i Tineret al Republicii Moldova

Universitatea Tehnic a Moldovei

Catedra: Informatica Aplicat

Raport
Lucrarea de laborator Nr.1
La Grafica pe calculator

02/03/2016

A efectuat:
A verificat:

gr.MI-141, Cazacliu Ion


lect.sup. Victor Moraru

Chiinu, 2016

Scopul lucrrii: Obinerea cunotinelor practice n sinteza figurilor i


suprafetelor 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.

Sarcina lucrrii:
1. Elaborai un program pentru sintetizarea i afiarea figurilor
grafice conform variantelor prezentate in tabelele 1 i 2.
2. Afiai simultan toate figurile sintezate in diferite pori de
vizualizare.
3. In codul scris prevedei salvarea imaginii intr-un fiier i restabilirea
ei ulterioar.
Varianta 4
Funciile de desenare a liniilor i suprafeelor sunt:
Line(x1,y1,x2,y2) functia afieaz o linie intre punctele de
coordonate (x1,y1) si (x2,y2), specificate ca parametri.
Rectangle(x1,y1,x2,y2) funcia afieaz un dreptunghi specificat
prin dou vrfuri diametral opuse: stnga sus si dreapta jos.

n biblioteca grafic exist funcii pentru desenarea urmtoarelor curbe


conice: cerc, arc de cerc, elips i arc de elips
Circle(x,y,r) funcia afieaz un cerc avnd centrul de coordonate
(x,y) i raza r,specificate ca parametri. Raza se exprim printr-un numr
ntreg.
Arc(x,y,ui,uf,r) funcia afieaz un arc de cerc, ntre unghiul iniial i
unghiul final snt specificate ca parametri. Raza cercului i coordonatele
centrului x i y snt de asemenea parametri ai funciei. Unghiurile iniial
i final se exprim n grade, cuprinse ntre 0 i 360 grade.
Ellipse(x,y,ui,uf,a,b) funcia afieaz elipsa sau un arc de elips.
Coordonatele centrului x i y, semiaxele a i b precum i unghiurile
iniial ui i respectiv uf snt specificate ca parametri ai funciei.
Drawpoly(n,m) funcia dat deseneaz un poligon cu numrul de
vrfuri n i coordonatele m.
Suprafaa poligonal
Fillpoly funcia afieaz o suprafat poliginal utilizind valorile
curente ale atributelor de afiare ale liniilor pentru contur, i valorile
curente ale atributelor de afiare ale suprafeelor pentru restul
punctelor suprafeei.
Poligonul se specific prin numrul de vrfuri i vectorul coordonatelor
(x,y) ale vrfurilor. n cazul n care coordonatele ultimului vrf difer de
coordonatele primului vrf poligonul este nchis automat.
setfillstyle(n,m) funcia dat definete culoarea i stilul n care va fi
colorat figura
Suprafaa circular i eliptic, sector de
cerc i de elips
sector(x,y,ui,uf,a,b) - funcia deseneaz un sector de cerc sau
de elips (depinte ce lungime le dm
rayelor). x,y coordonatele
centrului, unghiurile iniial i respectiv final; a,b - razele.
Listingul programului:
#include <graphics.h>
#include <stdio.h>

#include <conio.h>
#include <fstream>
#include <iostream>
using namespace std;

void salvare(){
int i,j;
ofstream f;
f.open("image.jpg",ios::out);
for(i=0;i<1280;i++)
for(j=0;j<800;j++)
f<<
getpixel(i,j)<<" ";
f.close();
}
void citire(){
int i,j;
unsigned int p;
ifstream r;
r.open("image.jpg",ios::in);
for(i=0;i<1280;i++)
for(j=0;j<800;j++){
r>>p;
putpixel(i,j,p);
}
r.close();
}
int main()
{
int gd = DETECT;
int gm;
initgraph(&gd, &gm, "C:\\TC\\BGI");
//Cerc
circle(125, 125, 100);

//Sector de cerc
arc(350, 125, 0, 90, 100);
int points[] = {350, 25, 350, 125, 450, 125};
drawpoly(3, points);
setfillstyle(1, 10);
floodfill(400, 100, WHITE);

//Triunghi
int tpoints[] = {525, 25, 525, 225, 725, 225, 525, 25};
setfillstyle(1, 1);
fillpoly(4, tpoints);
//Poligon cu 8 laturi
int p_points[] = {850, 25,
800, 100,
800, 150,
850, 225,
900, 225,
950, 150,
950, 100,
900, 25,
850, 25
};
drawpoly(9, p_points);
//Dreptunghi
setfillstyle(1, 2);
bar(1050, 25, 1340, 225);
//Linie
setcolor(YELLOW);
line(25, 500, 225, 500);
//Elipsa
setcolor(15);
ellipse(500, 500, 0, 360, 100, 125);
//Paralelipiped
int r_points[] = {

800, 400, 700, 600, 900, 600, 1000, 400, 800, 400
};
setfillstyle(1, RED);
fillpoly(5, r_points);

//Sectiune de elipsa
ellipse(1100, 500, 0, 80, 150, 100);
int e_points[] = {1249, 500, 1116, 500, 1116, 400};
drawpoly(3, e_points);
setfillstyle(1, 5);
floodfill(1150, 450, WHITE);
getch();
salvare();
cleardevice();
citire();
getch();
closegraph();
}

Rezultatele afi ate:

Concluzii: Efectund lucrarea dat am facut cunotin cu bazele


graficii n limbajul C++, am fcut cunotin cu funciile de desenare a
figurilor primitive i cu modurile de colorare a lor i afiare unor
sectiuni a acestor figuri.