Elemente de grafica de calculator - Cercuri
Ecuatia unui cerc ce trece prin origine:
. |
(1.4) |
Daca centrul este in (xc, yc), se face o translatie, definita prin
|
(1.5) |
Forma (1.4) nu este adecvata pentru trasare. De exemplu, dand valori lui x, pentru a gasi y trebuie rezolvata o ecuatie de gradul doi, trebuie verificat daca solutiile sunt reale etc.
Forma diferentiala a ecuatiei cercului:
2xdx+2ydy=0, sau
. |
(1.6) |
Incrementul ε se alege invers proportional cu raza r.
Forma discreta a ecuatiei:
|
(1.7) |
Problema: traseaza o spirala, pentru ca
|
|
Solutie: Se modifica ecuatiile (1.7), in forma
|
(1.8) |
Se poate arata (ca exercitiu) ca raza ramane constanta in acest caz.
.1. Algoritmul DDA pentru cerc
Se obtine urmatorul algoritm DDA pentru cerc. Algoritmul exploateaza simetria cercului si traseaza simultan cate 8 puncte. De fapt se genereaza doar un octant (intre 450 si 900).
cercDDA int x_c, int y_c, int r)
} // end cercDDA()
put8pix int x, int y, int x_c, int y_c )
2. Metoda rotatiei
Se porneste de la ecuatiile parametrice ale cercului:
|
(1.9) |
Un punct rotit in sens trigonometric cu unghiul θ are coordonatele:
|
(1.10) |
Pentru trasarea cercului, se alege un unghi incremental θ foarte mic.
Observatie privind implementarea
Apelul repetat al functiilor trigonometrice (lente) poate fi simplu evitat.
Se precalculeaza
a cos(θ), b=sin(θ), rezultand apoi algoritmul in forma:
|
(1.11) |
Algoritmul ce rezulta este similar celui DDA.
Exercitiu: scrieti o functie pentru trasarea cercului prin metoda rotatiei.
Conduce la operatii exclusiv cu numere intregi.
Genereaza de fapt un octant, ca si DDA, restul rezulta prin simetrie.
Porneste tot de la punctul maxim superior, de coordonate x=0, y=r.
Coordonata x se incrementeaza la fiecare pas. Coordonata y se decrementeaza numai la unii pasi. Trebuie gasita conditia pentru decrementarea lui y. Apar situatiile posibile din figura 2:
Pn este punctul curent, A, B, puncte succesoare candidat. Pentru P(x,y) notam f(x,y)=f(P).
Observam ca f(P)<0 in interiorul cercului, f(P)=0 pe cerc si f(P)>0 in exteriorul cercului.
Pentru situatiile a) si b) succesorul punctului Pn trebuie sa fie punctul A, mai apropiat de cerc decat B (y nu se incrementeaza). Pentru situatiile d) si e), succesorul trebuie sa devina punctul B. Situatia din c) este cea mai complicata, succesori putind fi atat A, cat si B. Trebuie ales punctul cel mai apropiat de cerc. Acesta este A daca f(A) < -f(B), respectiv daca f(A)+f(B) <0. Observam ca aceeasi inegalitate este valabila si pentru situatiile a) si b). Semnul inegalitatii se schimba pentru situatiile cand optiunea ideala este pentru punctul B. Rezulta urmatoarea regula simpla: y se decrementeaza (se alege B) daca
S= f(A)+f(B) <0.
Fig. 2
Interesant este faptul ca suma S poate fi evaluata recursiv, fara operatii de ridicare la putere, presupuse de ecuatia (1.4) a cercului. Formula de calcul este dependenta de directia de deplasare de la pasul precedent. Apar doua situatii (v. figura 3):
I) S≥0, deplasare orizontala,
II) S<0, deplasare oblica (orizontala si verticala)
Cazul I:
Sn = (xn+1)2+yn2-r2+(xn+1)2+(yn-1)2-r2,
Sn+1 = (xn+2)2+yn2-r2+(xn+2)2+(yn-1)2-r2 si rezulta
Sn+1=Sn+4xn+6.
Cazul II:
Sn = (xn+1)2+yn2-r2+(xn+1)2+(yn-1)2-r2,
Sn+1 = (xn+2)2+(yn-1)2-r2+(xn+2)2+(yn-2)2-r2 si rezulta
Sn+1=Sn+4(xn- yn)+10.
La pornire, xn=0, yn=r si Sn=1+r2- r2+1+(r-1)2-r2= 3-2r.
Rezulta urmatorul algoritm (in cod C++)
// algoritmul Bresenham pentru cerc
cercBresenham( int x_c, int y_c, int r )
x++;
}
if x==y)
put8pix( x, y, x_c, y_c );
} // end cercBresenham()
Politica de confidentialitate |
.com | Copyright ©
2024 - Toate drepturile rezervate. Toate documentele au caracter informativ cu scop educational. |
Personaje din literatura |
Baltagul – caracterizarea personajelor |
Caracterizare Alexandru Lapusneanul |
Caracterizarea lui Gavilescu |
Caracterizarea personajelor negative din basmul |
Tehnica si mecanica |
Cuplaje - definitii. notatii. exemple. repere istorice. |
Actionare macara |
Reprezentarea si cotarea filetelor |
Geografie |
Turismul pe terra |
Vulcanii Și mediul |
Padurile pe terra si industrializarea lemnului |
Termeni si conditii |
Contact |
Creeaza si tu |