CONSTRUIRE HISTOGRAMA
Se considera un sir de N element x[0], x[1], x[2], ..., x[N-1];
cu x[i]>0, i=0,1,2,...,N-1
si se pune problema de a efectua reprezentarea sub forma de histograma a elementelor sirului.
Histograma inseamna N dreptunghiuri cu aceeasi latime dar cu inaltimi proportionale cu valoarea inaltimii dreptunghiului.
Ecranul monitorului este vazut ca o matrice de pixeli cu NR_LINII si NR_COLOANE depinzand de rezolutia monitorului.
In cele mai multe cazuri NR_LINII = ??? si NR_COLOANE=???.
Se va considera ca histograma se reprezinta intr-un dreptunghi definit prin :
- inaltime ca numar de pixeli H=200;
- latime, tot ca numar de pixeli L=300.
Daca inaltimea uneui dreptunghi din histograma este hhisto=H-alfa, unde alfa este un numar de pixeli care diferentiaza reprezentarea elementului minim din sir in raport cu totalitatea imiaginii, pentru a calcula inaltimea hdrept[i] dreptunghiului asociat unui termen x[i] din sirul x[]se foloseste relatia:
hdrept[i]=(x[i]-xmin)/(xmax-xmin)+alfa
unde:
xmin este elementul minim din sirul x[]
xmax este elementul maxim din sirul x[].
Daca sirul are N termeni si dreptunghiurile care formeaza benzile histogramei sunt imprastiate, pentru a realiza o definire completa, la definirea celor N dreptunghiuri trebuie date coordonatele:
- coltului dreapta jos (xdj,ydj)
- coltului stanga sus (xss,yss) .
Este convenabil sa se construiasca 4 vectori fiecare avand N componente:
int xdj[N], ydj[N], xss[N],yss[N];
care sa fie initializate cu pozitiile pixelilor ce definesc un dreptunghi corespunzatoru unui element x[i] din sir, prin quatuplul (xdj[i],ydj[i],xss[i],yss[i]).
Intr-o structura for() se refera functia de reprezentare a dreptunghiului cu aceste quatupluri.
Trebuie:
- stabilit numarul de valori N pentru care se face histograma
- initializat sirul x[]
- stabilit nivelul constantei alfa
- calculate inaltimile hdrept[i]=(x[i]-xmin)/(xmax-xmin)+alfa
- stabilite coordonatele x0 si y0 ale punctului de start din grafic
- calculate coordonatele y ale punctelor stanga sus rpin relatia:
yss[i]=y0+hdrept[i]
- calculate coordonatele x ale punctelor drepta jos latime=total_X/N
xdj[i]=(i+1)*latime
total_X este o variabila care da numarul de pixeli de pe axa Ox pe care se intinde histograma.
Programul C++ care deseneaza histograma are textul sursa: