Ministerul Minis terul Educației și Tiner Tineret et al Repub Republicii licii Moldo Moldova va Universitatea Tehnică Tehnică a Moldovei
Catedra: Informatica Informati ca Aplicată Aplicată
Raport Lucrarea de laborator Nr.1 La Grafica pe calculator
020!201"
# efectuat$ # verificat$
%r.M&'1(1) *a+acliu &on lect.sup. ,ictor Moraru
*hi *hișinău inău)) 201" 201"
Scopul lucrării : Obţinerea cunoştinţelor practice în sinteza figurilor şi suprafetelor în baza bibliotecii grafice a oricărui limbaj de programare (Pascal C!! ori "a#a$% Consideraţii teoretice:
Orice lucru în regim grafc se începe cu iniţializarea modului grafc care se ace cu ajutorul unctiei InitGraph(GraphDriver,GraphMode) – uncţia stabileşte valorile implicite ale parametrilor de operare în mod grafc şi incarcă de pe disc în memorie modulul driver corespunzător primului parametru. Modul de lucru al driver-ului încarcat este specifcat prin al doilea parametru iar denumirea completă a căii unde se va cauta fşierul .!"# corespunzător este prezentată prin al treilea parametru. $nc%iderea modului se ace cu & Closegraph – uncţia eectuiază revenirea în mod te't modului implicit de lucru a sistemului de afşare. (a apelează uncţia grap%reemen pentru a elibera memoria ocupată de driver-ulgrafc setul sau seturile de caractere utilizate de program precum şi zonele de memorie interne.
Sarcina lucrării:
). (labora*i un program pentru sintetizarea şi af+area fgurilor grafce conorm variantelor prezentate in tabelele ) +i ,. ,. f+a*i simultan toate fgurile sintezate in dierite por*i de vizualizare. . #n codul scris prevede*i salvarea imaginii intr-un f+ier +i restabilirea ei ulterioară. Varianta 4 Funcţiile de desenare a liniilor şi supraeţelor sunt! "ine(#$,%$,#&,%&) – unctia afşează o linie intre punctele de
coordonate /')0)1 si /',0,1 specifcate ca parametri. 'ectangle(#$,%$,#&,%&) – uncţia afşează un dreptung%i specifcat
prin două vîruri diametral opuse& stînga sus si dreapta jos.
$n biblioteca grafcă e'istă uncţii pentru desenarea următoarelor curbe conice& cerc arc de cerc elipsă şi arc de elipsă Circle(#,%,r) – uncţia afşează un cerc avînd centrul de coordonate
/'01 şi raza rspecifcate ca parametri. 2aza se e'primă printr-un număr întreg. rc(#,%,ui,u,r) – uncţia afşează un arc de cerc între ung%iul iniţial şi
ung%iul fnal sînt specifcate ca parametri. 2aza cercului şi coordonatele centrului ' şi 0 sînt de asemenea parametri ai uncţiei. 3ng%iurile iniţial şi fnal se e'primă în grade cuprinse între 4 şi 54 grade. llipse(#,%,ui,u,a,*) – uncţia afşează elipsa sau un arc de elipsă.
6oordonatele centrului ' şi 0 semia'ele a şi b precum şi ung%iurile iniţial ui şi respectiv u sînt specifcate ca parametri ai uncţiei. Dra+pol%(n,) – uncţia dată desenează un poligon cu numărul de
vîruri n şi coordonatele m. -upraaţa poligonal. Fillpol% – uncţia afşează o supraată poliginală utilizind valorile
curente ale atributelor de afşare ale liniilor pentru contur şi valorile curente ale atributelor de afşare ale supraeţelor pentru restul punctelor supraeţei. 7oligonul se specifcă prin numărul de vîruri şi vectorul coordonatelor /'01 ale vîrurilor. $n cazul în care coordonatele ultimului vîr dieră de coordonatele primului vîr poligonul este înc%is automat. set/llst%le(n,) – uncţia dată defneşte culoarea şi stilul în care va f
colorată fgura -upraaţa circular. şi eliptic., sector de cerc şi de elips.
sector(#,%,ui,u,a,*) - uncţia desenează un sector de cerc sau
de elipsă /depinte ce lungime le dăm ra0elor1. '0 – coordonatele centrului ung%iurile iniţial şi respectiv fnal8 ab - razele. Listingul programului: #include #include
#include #include #include using namespace std;
void salvare(){ int i,j; ofstream f; f.open("image.jpg",ios::out); for(i!;i<$!;i%%)
for(j!;j<$!!;j%%) f<< getpi&el(i,j)<<" ";
f.close(); ' void citire(){ int i,j; unsigned int p; ifstream r; r.open("image.jpg",ios::in); for(i!;i<$!;i%%) for(j!;j<$!!;j%%){
r>>p;
putpi&el(i,j,p); '
r.close(); ' int main() { int gd *+*; int gm; initgraph(gd, gm, "+:--*+--/0");
11+erc circle(2, 2, !!);
113ector de cerc arc(42!, 2, !, 5!, !!); int points67 {42!, 2, 42!, 2, 82!, 2'; dra9pol(4, points); setfillstle(, !); floodfill(8!!, !!, 0*);
11*riunghi int tpoints67 {22, 2, 22, 2, =2, 2, 22, 2'; setfillstle(, ); fillpol(8, tpoints); 11oligon cu $ laturi int p?points67 {$2!, 2, $!!, !!, $!!, 2!, $2!, 2, 5!!, 2, 52!, 2!, 52!, !!, 5!!, 2, $2!, 2 '; dra9pol(5, p?points);
11reptunghi setfillstle(, ); @ar(!2!, 2, 48!, 2);
11Ainie
setcolor(BAAC); line(2, 2!!, 2, 2!!);
11lipsa
setcolor(2); ellipse(2!!, 2!!, !, 4D!, !!, 2);
11aralelipiped int r?points67 {
$!!, 8!!, =!!, D!!, 5!!, D!!, !!!, 8!!, $!!, 8!! '; setfillstle(, E); fillpol(2, r?points);
113ectiune de elipsa ellipse(!!, 2!!, !, $!, 2!, !!); int e?points67 {85, 2!!, D, 2!!, D, 8!!'; dra9pol(4, e?points); setfillstle(, 2); floodfill(2!, 82!, 0*);
getch();
salvare();
cleardevice();
citire();
getch();
closegraph();
'
Rezultatele afiș ate:
Concluzii: Efectuînd lucrarea dată am facut cunoştinţă cu bazele
gracii în limbajul C++, am făcut cunoştinţă cu funcţiile de desenare a gurilor primitive şi cu modurile de colorare a lor şi aşare unor sectiuni a acestor guri.