Sunteți pe pagina 1din 4

Teme pentru laboratorul de

Grafică pe Calculator
Se vor implementa în orice limbaj de programare algoritmii indicaţi mai jos.
Orice program va avea o componentă logică (implmentarea prelucrarii
datelor) şi una vizuală (afişarea elementelor grafice – puncte, drepte, cercuri
segmente, cercuri, poligoane etc). Programele trebuie să aibă un caracter
interactiv (utilizatorul poate să schimbe datele de intrare şi să comande
efectuarea operaţiilor în timpul execuţiei).

1. Verificarea situării unui punct dat pe dreapta determinată de alte 2


puncte distincte şi, în cazul când punctul aparţine dreptei,
determinarea poziţiei relativ la cele 2 puncte care determină dreapta
(între ele, sau pe una din semidreptele cu originea în unul din cele 2
puncte, opusă celuilalt punct, zone notate 1, 2 , 3 în figura de mai jos,
sau coincide cu unul din cele 2 puncte).

2. Verificarea situării a 2 puncte date faţă de o dreaptă determinată de


alte 2 puncte distincte, adică determinarea aceleia din urmatoarele
situaţii în care se află punctele:
- amândouă punctele se afla pe dreaptă, în care caz se va determina
poziţia relativ la cele 2 puncte care determină dreapta, ca la tema 1;
- un punct în afara dreptei, iar celălalt pe dreaptă, pentru acesta
determinându-se poziţia relativ la cele 2 puncte care determină
dreapta, ca la tema 1;
- amândouă punctele în afara dreptei, în acest caz determinându-se dacă
sunt situate amândouă de acceaşi parte (semiplan) a dreptei sau unul
de o parte, iar celălalt de cealaltă parte (semiplane opuse).
3. Determinarea poziţiei relative a 2 drepte: coincid, sunt paralele sau se
intersectează, în acest caz determinându-se punctul de intersecţie.
4. Conversii între oricare două dintre sistemele de reprezentare a
culorilor: RGB, XZY, Yxy, CMY, CMYK.
5. Conversii între oricare două dintre sistemele de reprezentare a
culorilor: RGB, HSL, HSV.
6. Algoritmul Bresenham de trasare a segmentelor.
7. Algoritmul Bresenham de trasare a cercurilor.
8. Determinarea apartenenţei unui punct la interiorul , exteriorul sau
frontera unui cerc folosindu-se distanţa punctului faţă de centrul
cercului. Utilizare la colorarea interiorului unui cerc.
9. Determinarea apartenenţei unui punct la interiorul , exteriorul sau
frontera unui cerc folosindu-se intersecţiile cu cercul ale dreptei
orizontale care trece prin punct. Utilizare la colorarea interiorului unui
cerc.
10. Decuparea segmentelor în raport cu o fereastră de vizualizare
dreptunghiulară. Algoritmul Cohen-Sutherland.
11. Decuparea segmentelor în raport cu o fereastră de vizualizare
dreptunghiulară. Algoritmul de bisecţiune.
12. Decuparea segmentelor în raport cu o fereastră de vizualizare
dreptunghiulară. Algoritmul Cyrus-Beck.
13. Decuparea segmentelor în raport cu o fereastră de vizualizare
dreptunghiulară. Algoritmul Nicholl-Lee-Nicholl.
14.Să se stabilească dacă o polilinie este linie poligonală.
15.Să se stabilească dacă un poligon este convex sau concav.
16.Determinarea înfăşurătorii convexe a unei mulţimi de puncte
necoliniare.
17.Determinarea complementelor unui poligon concav.
18. Decuparea poligoanelor în raport cu o fereastră de vizualizare
dreptunghiulară. Algoritmul Sutherland-Hodgman.
19. Decuparea poligoanelor în raport cu o fereastră de vizualizare
dreptunghiulară. Algoritmul Liang Barsky.
20. Determinarea apartenenţei unui punct la interiorul , exteriorul sau
frontera unui triunghi prin rezolvarea unui sistem liniar. Utilizarea la
colorarea interiorului unui triunghi.
21. Colorarea interiorului unui triunghi prin scanarea cu o dreaptă.
22. Determinarea apartenenţei unui punct la interiorul, exteriorul sau
frontiera unui poligon convex prin verificarea situării punctului faţă
de fiecare latură a poligonului de aceeaşi parte cu vârfurile
poligonului care nu aparţin laturii. Utilizarea la colorarea interiorului
unui poligon convex.
23. Determinarea apartenenţei unui punct la interiorul, exteriorul sau
frontiera unui poligon convex prin verificarea situării vârfurilor
poligonului faţă de dreapta care uneşte punctul cu un vârf fixat al
poligonului. Utilizarea la colorarea interiorului unui poligon convex.
24. Determinarea apartenenţei unui punct la interiorul, exteriorul sau
frontiera unui poligon concav prin metoda intersecţiei cu o
semidreaptă. Utilizarea la colorarea interiorului unui poligon concav.
25. Determinarea apartenenţei unui punct la interiorul, exteriorul sau
frontiera unui poligon concav prin metoda numărului înfăşurător
(winding number). Utilizarea la colorarea interiorului unui poligon
concav.
26. Determinarea unei triangulaţii a unui poligon concav. Utilizarea la
colorarea interiorului unui poligon concav.
27. Determinarea complementelor unui poligon concav.
28. Colorarea interiorului unui poligon concav utilizând înfăşurătoarea
convexă şi complementele.
29. Decuparea unui poligon (contur şi interior) în raport cu o fereastră de
vizualizare dreptunghiulară.
30. Implementarea algoritmului LZW (actualizarea dicţionarului /
compresie / decompresie). (*)
31. Implementarea algoritmului Shannon-Fano (crearea arborelui de
codificare / compresie / decompresie). (**)
32. Implementarea algoritmului Huffman (crearea arborelui de
codificare / compresie / decompresie). (**)
33.Implementarea algoritmului RLE (compresie/decompresie).
34.Implementarea algoritmului RLE (compresie/decompresie).
35. Implementarea algoritmului DE fără pierdere (compresie /
decompresie).
36. Implementarea algoritmului DE cu pierdere (compresie/decompresie).
37. Crearea hărţilor de biţi Windows pe 1, 4, 8 biţi şi a fişierelor
corespunzătoare.
38. Crearea hărţilor de biţi Windows pe 24, 32 biţi şi a fişierelor
corespunzătoare.

(*) a) Dicţionarul va consta din 2 şiruri (scrise eventual în fişiere):


- un şir în care va conţine concatenate toate şirurile din dicţionar, în ordinea
introducerii, codul fiecărui şir rezultând din numărul său de ordine;
- alt şir va conţine poziţiile de început în primul şir ale şirurilor din dicţionar.
Se poate folosi pentru codificare o implementare mai puţin performantă ca
rată de compresie, dar mai uşor de realizat, de exemplu:
- codul oricărui şir din dicţionar va ocupa 2 octeţi şi va fi precedat în
şirul de ieşire de un indicator care va ocupa 1 octet ce va conţine
valoarea 1;
- codul oricărui caracter va ocupa 1 octet şi va fi precedat în şirul de
ieşire de un indicator care va ocupa 1 octet ce va conţine valoarea 0.
Această codificare devine performantă numai dacă în dicţionar vor exista un
număr suficient de mare de şiruri de lungime cel puţin 3, dar evită utilizarea
operaţiilor la nivel de bit, oarecum complicate pentru acest algoritm.
(**) Se vor folosi operaţii la nivel de bit, destul de simple în acest caz.

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