Documente Academic
Documente Profesional
Documente Cultură
▪ Atribute topologice, care definesc modul in care sunt conectate varfurile (laturi,
ciclul de laturi al unei feţe, ş.a.);
Transformarile
geometrice se aplica
coordonatelor varfurilor
obiectului si nu afecteaza
atributele sale!
5
EGC – Transformari geometrice 2D
Transformari geometrice 2D elementare (2)
• Translatia (2)
6
EGC – Transformari geometrice 2D
Transformari geometrice 2D elementare (3)
Reprezentarea matriciala
Efecte:
- Daca sx sau sy sau ambii sunt >1: marire si îndepartare de origine
- Daca sx sau sy sau ambii sunt <1: micsorare si apropiere de origine
➢ sx = sy , scalare uniforma: nu modifica forma obiectului
7
EGC – Transformari geometrice 2D
Transformari geometrice 2D elementare (4)
8
EGC – Transformari geometrice 2D
Transformari geometrice 2D fata de un punct oarecare din plan (1)
Scalarea fata de un punct oarecare din plan
- Punctul fix al transformării este un punct oarecare F(xf,yf) – coordonatele sale nu
se modifica prin aplicarea transformării.
Rezultă:
x’ = x*cos(u) – y*sin(u) + xf – xf*cos(u) + yf*sin(u)
y’ = x*sin(u) + y*cos(u) + yf – xf*sin(u) – yf*cos(u)
- Daca P este punctul transformat si Pt punctul obtinut prin aplicarea transformarii compuse:
Pt = M * P, unde P si Pt sunt vectori coloana,
în loc de P’ = S * P; P” = R * P’; Pt = T * P” unde M = T * R * S
- Matricea unei transformari compuse se obtine prin înmultirea matricilor transformarilor
elementare.
Coordonate omogene:
13
EGC – Transformari geometrice 2D
Transformarile inverse ale transformarilor elementare
▪ Translaţia prin care punctul fix al transformării ajunge în origine: T(-xf, -yf);
Faṭă de origine:
x’ = - x
y’ = - y
17
EGC – Transformari geometrice 2D
Alte transformari geometrice elementare 2D(2)
Oglindirea faţă de o dreaptă oarecare
Se exprimă ca transformare compusa prin înmulţirea matricilor urmatoarelor transformari:
2. O rotaţie faţă de origine, a.î. dreapta să se suprapună peste una dintre axele principale:
R(0,0,u)
Deduceti elementele matricilor T, R, O, atunci cand dreapta este data printr-un punct, (xd, yd)
18
EGC – Transformari geometrice 2D
Alte transformari geometrice 2D (3)
Forfecarea
Forfecarea faṭă de origine –
transformare elementara- este
definita prin 2 numere reale:
Forfecarea fata de un punct oarecare din plan, (xf,yf) , exprimata ca transformare compusa:
19
EGC – Transformari geometrice 2D
Punctul (xc + raza, yc) rotit
fata de (xc,yc)
Translate(xc, yc) *
Transform2D::Rotate(0.628f * i) *
Transform2D::Translate(-xc, -yc)
raza
(xc,yc) (xc + raza, yc)
(x = latura/2, y = latura/2
Transformarea de vizualizare 2D
Aplicatia defineste
graficul functiei in Coordonatele punctelor de pe graficul afisat
sistemul de coordonate pe ecran sunt adrese de pixeli.
utilizator (logice).
sx=1, sy = 1
tx = 0, ty =0
sx=2, sy = 1
tx = 0, ty =0
tx = xpmin- sx*xfmin
sx=2, sy = 1
tx = 10 7
(10, 20) ty = 20
Transformarea de vizualizare 2D (5)
Scalare uniforma
cu afisare centrata in poarta de vizualizare
sx = 400, sy = 200
tx=0, ty =0
Pentru scalare uniforma:
s = min (sx, sy)
tsx = 100,
tsy =0
tsx =(xpmax – xpmin – s*(xfmax – xfmin))/2
= (400 – 200*1) /2 = 100
tsy =(ypmax – ypmin – s*(yfmax – yfmin))/2
= (200 – 200*1) /2 = 0 8
Transformarea de vizualizare 2D (7)
Efectele transformarii
(xp, yp)
sx = 400, sy = 200
s=smin = 200
tx = tsx =100, ty =0
ty = 50
(0,0) (1,0) x yp’ = -yp + ypmax + ypmin
xp = xf * sx + tx
yp = – (yf * sy + ty) + ypmin + ypmax = -yf * sy + ypmin + ypmax -ty
xp xf sx 0 tx
yp = M * yf
M = 0 − sy yp min + yp max − ty
1 1
0 0 1
11
Implementarea transformarii de vizualizare în OpenGL (1)
- Pentru setarea zonei de afisare, în OpenGL se apeleaza
unde (ox,oy) sunt coord. coltului stanga jos al viewportului, in coordonatele ferestrei aplicatiei.
ECRAN
1
Object2DGrafic.cpp
Mesh* Object2DGrafic::CreateFunctionPlot(std::string name,
float &x1, float &x2, float &y1, float &y2, float pas, float(*f)(double f))
//Creaza graficul unei functii matematice y=f(x), pe un interval x1-x2 dat, în spatiul logic
//Include in desen si axele sistemului de coordonate
CreateFunctionPlot (1)
Mesh* Object2DGrafic::CreateFunctionPlot(std::string name,
float &x1, float &x2, float &y1, float &y2, float pas, float(*f)(double f))
{ // calculeaza punctele de pe graficul functiei matematice y = f(x) in intervalul x1 – x2,
//in coordonate logice
// întoarce în (x1,y1), (x2,y2) încadrarea graficului incluzand si axele sistemului de coordonate
3
CreateFunctionPlot (2)
// Include axele OX, OY în încadrarea graficului
if (0<xmin)x1 = 0; else x1 = xmin;
if (0<y1)y1 = 0;
if (0>xmax)x2 = 0; else x2 = xmax;
if (0>y2)y2 = 0;
4
CreateFunctionPlot (3)
plot->InitFromData(vertices, indices);
return plot;
5
TransformareaFereastraPoartaGrafic.cpp
void TransformareaFereastraPoartaGrafic::Init()
{
//setare camera
…………………………
D[a,b]
(xd,yd)
(a,b)
Oox R(0,0,u) T(xd, yd)
T(-xd, -yd)
R(0,0,-u)