View
35
Download
0
Category
Preview:
DESCRIPTION
CURS3_Curbe Si Supf Parametrice, opengl
Citation preview
CURS 3 – CURS 4
Reprezentarea prin suprafeţe de frontieră
A. Prin suprafeţe de frontieră
• Reprezentarea poligonală
• Reprezentarea liniilor şi a suprafeţelor curbe folosind ecuaţii parametrice
• Reprezentarea obiectelor cu simetrie de rotaţie sau de translaţie prin baleiere spaţială
• Reprezentarea suprafeţelor cvadrice
• Reprezentarea suprafeţelor utilizând funcţii de douã variabile
Reprezentarea liniilor şi a suprafeţelor curbe folosind ecuaţii parametrice
• O curbă tridimensională poate fi reprezentată prin perechea de funcţii:
y = f (x)z = g (x)
• Dezavantajele metodei
Ecuaţiile clasice ale unei curbe 3D
Ecuaţiile parametrice
• P (u) = ( x(u), y(u), z(u) )unde u ia valori în domeniul [0 ÷1]
Exemplu (ecuatia parametrica a cercului):
unde u ia valori de la 0 la 1.
),2cos()( urux π⋅=
),2sin()( uruy π⋅=z(u) = 0
Continuitatea în punctele de contact
Continuitate
geometrică
de ordinul 0
G0
Continuitate
geometrică
de ordinul 1
G1
V1=k.V2
Pantele vectorlortangenţi sunt egale
Continuitate
parametrică
de ordinul 1
C1
V1=V2
Vectori tangenţi egali
Derivate de ordinul I egale
Continuitate
parametrică
de ordinul 2
C2
Derivate de ordinul II egale
Ecuaţiile parametrice pentrusuprafeţe
• P(u, v)=(x(u, v), y(u, v), z(u,v))• Exemplu (ecuaţia parametrică a sferei):
),2cos()sin(),( vurvux ππ ⋅⋅=
),2sin()sin(),( vurvuy ππ ⋅⋅=
),cos(),( urvuz π⋅=
v
u
xy
z
• s-au interpolat punctele de control
• ecuaţiile aproximează suprafeţele sau curbele
Curbe parametrice polinomiale
x = x(u)P(u) y = y(u)
z = z(u)
Exemplu: curbe parametrice cubice (grad 3 în u)
zzzz
yyyy
xxxx
ducubuauz
ducubuauyducubuaux
+⋅+⋅+⋅=
+⋅+⋅+⋅=
+⋅+⋅+⋅=
23
23
23
)(
)()(
unde 0 ≤ u ≤ 1
Forma matriceală a ecuaţiilor curbelor parametrice cubice
P(u) = [x(u) y(u) z(u)] = U . C
U = [u3 u2 u 1]
=
zyx
zyx
zyx
zyx
dddcccbbbaaa
C
continuareC = M . G
=
44434241
34333231
24232221
14131211
mmmmmmmmmmmmmmmm
M
[ ]zyx GGGG=
C = M . [Gx Gy Gz]
Gx, Gy, Gz - vectori de geometrieG - matrice de geometrie
x(u) = U . M . Gx
y(u) = U . M . Gy
z(u) = U . M . Gz
xx
xx
gmummumugmummumu
gmummumugmummumuux
44434242
143
34333232
133
24232222
123
14131212
113
)()(
)()()(
+++++++
++++++++=
Polinoamele de amestec: B = U . M
zz
zz
gmummumugmummumugmummumugmummumuuz
44434242
143
34333232
133
24232222
123
14131212
113
)()()()()(
+++++++
++++++++=
yy
yy
gmummumugmummumu
gmummumugmummumuuy
44434242
143
34333232
133
24232222
123
14131212
113
)()(
)()()(
+++++++
++++++++=
Metode de reprezentare a curbelor• Reprezentarea curbelor prin segmente
de dreaptă
• Metodă recursivă de reprezentare a curbelor prin înjumătăţirea intervalelorde reprezentat
e
Reprezentarea curbelor prin segmente de dreaptă
typedef float VECT_C [4];void moveto_3D (float, float, float);// poziţionează punctul de început al unui segment de dreaptă
void lineto_3D (float, float, float);// desenează un segment de dreaptă între punctul anterior şi cel curent
/*procedura de desenare a unei curbe definite parametricprin matricea C şi care este aproximată prin n segmente de dreaptă*/
void traseaza_curba_3D (VECT_C cx, VECT_C cy, VECT_C cz, int n){int n;double u2, u3, u=0;double pas = 1/(double)n;moveto_3D (cx[3], cy[3], cz[3]); //la inceputul curbeifor (i=1; i<=n; i++)
{u += pas; u2 = u*u; u3 = u2*u;x = cx[0]*u3 + cx[1]*u2 + cx[2]*u + cx[3];y = cy[0]*u3 + cy[1]*u2 + cy[2]*u + cy[3];z = cz[0]*u3 + cz[1]*u2 + cz[2]*u + cz[3];lineto_3D (x, y, z);}
}
Metodă recursivă de reprezentare a curbelorprin înjumătăţirea intervalelor de reprezentat
procedura Deseneaza_Curba ( curba, e)dacă test (curba, e) atunci
desenează_dreapta (curba)
altfeldivide_curba (curba, curba_stanga, curba_dreapta)Deseneaza_Curba (curba_stanga, e)Deseneaza_Curba (curba_dreapta, e)
Familii de curbe
P(u) = [x(u) y(u) z(u)] = U . C= U . M . G
M - defineşte familia de curbeG - defineşte geometria curbei în cadrul
aceleiaşi familii
HermiteCurbe Bézier
spline
Curbe cubice Hermite
=
x
x
x
x
Hx
RRPP
G
4
1
4
1
HxH
HxHxxxx
GMuuu
GMUducubuaux
⋅⋅=
=⋅⋅=+⋅+⋅+⋅=
]1[
)(23
23
HxHx
HxHx
GMPxGMPx
⋅⋅==⋅⋅==
]1111[)1(]1000[)0(
4
1
HxH GMuuux ⋅⋅= ]0123[)(' 2
HxHx
HxHx
GMRxGMRx⋅⋅==⋅⋅==
]0123[)1(']0100[)0('
4
1
HxH
x
x
x
x
Hx GM
RRPP
G ⋅⋅
=
=
0123010011111000
4
1
4
1
−−−
−
=
=
−
000101001233
1122
0123010011111000 1
HM
[ ]
423
123
423
123
)()2(
)32()132(
)()()()(
RuuRuuu
PuuPuu
GBGMUuzuyuxuP HHHH
−++−+
++−++−=
=⋅=⋅⋅==
Curbe cubice Hermite
Continuitatea în punctele de contact
7
4
7
4
4
1
4
1
;
RkRPP
RRPPContinuitate geometrică de ordinul I – G1
P7P4
P1
Continuitate parametrică de ordinul I – C1
7
4
7
4
4
1
4
1
;
RRPP
RRPP
R1
R4kR4
R7
Curbe Bézier
pk = (xk, yk, zk)k=0, 1, 2, ...n
∑=
⋅=n
knkk uBpuP
0, )()(
knknk uuknCuB −−⋅⋅= )1(),()(,
)!(!!),(
knknknC−⋅
=
∑=
⋅=n
knkk uBxux
0, )()(
∑=
⋅=n
knkk uByuy
0, )()(
∑=
⋅=n
knkk uBzuz
0, )()(
P(u)
221
20
22,2
2,1
22,0
)1(2)1()(
)(
)1(2)()1()(
upuupupuP
uuB
uuuBuuB
⋅+−⋅⋅⋅+−⋅=
=
−⋅⋅=
−=
221
20
221
20
221
20
)1(2)1()(
)1(2)1()(
)1(2)1()(
uzuuzuzuz
uyuuyuyuy
uxuuxuxux
⋅+−⋅⋅⋅+−⋅=
⋅+−⋅⋅⋅+−⋅=
⋅+−⋅⋅⋅+−⋅=
Pentru n = 2, deci pentru 3 puncte de control.
şi explicit
Exemplu
33
22
12
03 )1(3)1(3)1()( PuPuuPuuPuuP ⋅+⋅−⋅⋅+⋅−⋅⋅+⋅−=
Pentru n = 3, deci pentru 4 puncte de control.
Funcţiile de amestec pentru o curbă Bezier cu 4 puncte de control (n=3)
0 00 01 1
1 11 1
1 1u uu u
B0,3(u) B2,3(u)B1,3(u) B3,3(u)
33
22
12
03 )1(3)1(3)1()( PuPuuPuuPuuP ⋅+⋅−⋅⋅+⋅−⋅⋅+⋅−=
Curbe cubice Bezier
33,3
23,2
23,1
33,0
)(
)1(3)(
)1(3)(
)1()(
uuB
uuuB
uuuB
uuB
=
−⋅⋅=
−⋅⋅=
−=
33
22
12
03 )1(3)1(3)1()( PuPuuPuuPuuP ⋅+⋅−⋅⋅+⋅−⋅⋅+⋅−=
[ ]
•
−−
−−
•=
3
2
1
0
23
0001003303631331
1)(
PPPP
uuuuP
1. Curbele Bézier trec prin punctele de control extreme care definesccurba (p0, p3)
03,00)( pBpuP =⋅= în u=0
3)( puP = în u=1
33
22
12
03 )1(3)1(3)1()( PuPuuPuuPuuP ⋅+⋅−⋅⋅+⋅−⋅⋅+⋅−=
2. Primele şi ultimele două puncte de control aparţin tangentelor în extremităţi
P0P0
P2
P2P3
P3
P1
P1
P0P2
P1
P0
P2
P3
P1
P0
P2
P3
P1
P0
P2
P3
P1
P0P2
P1
P0
P2
P3
P1
3. Curbele Bézier se aşează în interiorul conturului poligonal convex definit de punctele de control
4. Curbe închisePunctele extreme -P0 şi P3- au aceleaşi coordonate
P0, P3
P1
P2
5. Curba este atrasă spre zona cu mai multe puncte de control
P0
P1, P2
P3
P4
Caracteristicile curbelor Bezier
1. Curbele Bézier trec prin punctele de control extreme care definesc curba (p0, p3)
2. Primele şi ultimele două puncte de control aparţin tangentelor în extremităţi
3. Curbele Bézier se aşează în interiorul conturuluipoligonal convex definit de punctele de control
4. Curbe închise: Punctele extreme -P0 şi P3- au aceleaşi coordonate
5. Un punct în vecinătatea căruia se definesc mai multepuncte de control va “atrage” curba spre el.
uu
kknBB
uu
kknB
uu
uu
knCknC
BB
uuknCB
uuknCB
nknk
nk
kn
kn
k
k
nknk
knknk
knknk
−⋅
+−⋅=
−⋅
+−⋅=
=−
−⋅⋅
−⋅=
−⋅⋅=
−⋅⋅−=
−
−
+−
−
−−
−
+−−−
11
11
)1()1(
)1,(),(
)1(),(
)1()1,(
,1,
,1
11,1,
,
11,1
Reprezentarea curbelor Bezier
// procedura de determinare a coordonatelor x şi y pentru o curbă Bézier, // în punctul de parametru uvoid Bezier (double u, int *x, int *y){double B;int k;if (u==0) { *x= P[0].x; *y= P[0].y; return; }
//curba Bézier trece prin punctele extremeif (u==1) { *x= P[n].x; *y= P[n].y; return; }B = pow (1-u, n);*x= B*P[0].x; *y=B*P[0].y; //primul termen se calculează nerecursiv
//relaţia recursivă de determinare a lui Bfor (k=1; k<=n; k++){B =B*(n-k+1) * u / k / (1-u);
*x = *x + B*P[k].x;*y = *y + B*P[k].y;}
}
Reprezentarea curbelor Bezier
typedef struct {int x, y;} PUNCT;PUNCT P[20];int n;// procedura de desenare a unei curbe definite parametric prin funcţia Bezier, pe//porţiunea definită de u=umin şi u=umax şi cu o variaţie a lui u definită de pasvoid traseaza_curba_bidim (double umin, double umax, double pas,
void (*Bezier)(double, int *x, int *y)){double u;int incep_x, incep_y, x, y;(* Bezier) (umin, &incep_x, &incep_y);moveto(incep_x, incep_y);for(u=umin+pas; u<umax; u+=pas){(*Bezier)(u, &x, &y);if ( incep_x != x || incep_y != y)
{ lineto(x, y);incep_x=x;incep_y=y; }
}(*Bezier) (umax, &x, &y);// coordonatele curbei corespunzătoare lui umax
if (incep_x!=x || incep_y!=y)lineto(x, y);
}
Reprezentarea curbelor Bezier
Curbe spline∑=
⋅=n
k
tkk uNpuP0
, )()(
Funcţiile de amestec Nk,t sunt polinoame de gradul (t-1), independent de numărul punctelor de control.
u variază în intervalul: 0 ÷ (n-t+2)
Numărul total al segmentelor de curbă: (n-t+2). Fiecare din aceste curbe va fi controlată (ca şi formă) de t puncte de
control Numărul punctelor de control: (n+1).
<≤
= +
altfelrur
uN kkk ,0
,1)( 1
1,
)()()( 1,11
1,1
, uNrr
uruN
rrru
uN tkktk
tktk
ktk
ktk −+
++
+−
−+⋅
−−
+⋅−
−=
rj - valori nodale, punctele corespunzătoare lor pe o curbă B-spline sunt numite noduri
Exemplu: n = 6 şi t = 4
n + t = 10numărul subintervalelor0, 0, 0, 0, 1, 2, 3, 4, 4, 4, 4valorile nodale
5numărul nodurilor
[0, 4]intervalul de variaţie al lui u
n - t + 2 = 4numărul segmentelor de curbă
t -1 = 3gradul polinoamelor de amestec
n + 1 = 7numărul punctelor de control:
Valorile nodale pentru curbele B-spline uniforme
• pentru valori ale lui j în domeniul 0 ÷ (n+t)
>>++−≤≤+−<
=njtnpentrutn
njtpentrutjtjpentru
rj
21
0
Exemplu pentru (t = 3) şi (n = 4)
5 puncte de control: P0, P1, P2, P3, P4
grad în u: 2
j∈[0,7], u∈[0,3]
r0 = 0; r1 = 0; r2 = 0; r3 = 1; r4 = 2; r5 = 3; r6 = 3; r7 = 3;
3 segmentelor de curbă: Q1, Q2, Q3.
Curba Q1 va fi controlată de punctele P0, P1, P2.
Curba Q2 va fi controlată de punctele P1, P2, P3.
Curba Q3 va fi controlată de punctele P2, P3, P4.
Schema de calcul recursiv a polinoamelor (pentru exemplu (t = 3) şi (n = 4))
N0,1 N0,2 N0,3 N0,4
N1,1 N1,2 N1,3 N1,4
N2,1 N2,2 N2,3 N2,4
N3,1 N3,2 N3,3 N3,4
N4,1 N4,2 N4,3 N4,4
N5,1 N5,2 N5,3 N5,4
<≤
= +
altfelrur
uN kkk ,0
,1)( 1
1, )()()( 1,11
1,1
, uNrr
uruN
rrru
uN tkktk
tktk
ktk
ktk −+
++
+−
−+⋅
−−
+⋅−
−=
Calculul polinoamelor (pentru exemplu)
Polinoamele de grad 0:
∈
=
∈
=
∈
=
=
=
=
=
altfelu
uN
altfelu
uN
altfelu
uN
altfelu
uN
altfelu
uN
0)3,2[1
)(
0)2,1[1
)(
0)1,0[1
)(
001
)(
001
)(
1,4
1,3
1,2
1,1
1,0
)()2()()()(
)()3()()1()()()(
)()2()()()()(
)()1()()()(
0)()()(
1,41,556
61,4
45
42,4
1,41,31,445
51,3
34
32,3
1,31,21,334
41,2
23
22,2
1,21,223
31,1
12
12,1
1,112
21,0
01
02,0
uNuuNrrur
uNrrru
uN
uNuuNuuNrrur
uNrrru
uN
uNuuNuuNrrur
uNrrru
uN
uNuuNrrur
uNrrru
uN
uNrrur
uNrrru
uN
⋅−=⋅−−
+⋅−−
=
⋅−+⋅−=⋅−−
+⋅−−
=
⋅−+⋅=⋅−−
+⋅−−
=
⋅−=⋅−−
+⋅−−
=
=⋅−−
+⋅−−
=
Polinoamele de grad 1:
<≤
= +
altfelrur
uN kkk ,0
,1)( 1
1, )()()( 1,11
1,1
, uNrr
uruN
rrru
uN tkktk
tktk
ktk
ktk −+
++
+−
−+⋅
−−
+⋅−
−=
Polinoamele de grad 2:
)()3(5,0
)()362(5,0
)(5,0)()()(
0)2,1[)2(5,0)1,0[)34(5,0
)(
)()2(5,0
)34(5,0)()()(
0)1,0[)1(
)(
)()1()()()(
1,42
1,32
1,22
2,335
52,2
24
23,2
23,1
1,32
1,22,224
42,1
13
13,1
2
3,0
1,22
2,113
32,0
02
03,0
uNu
uNuu
uNuuNrruruN
rrruuN
altfeluuuuu
uN
uNu
NuuuNrruruN
rrruuN
altfeluu
uN
uNuuNrruruN
rrruuN
⋅−⋅
+⋅−+−⋅+
+⋅⋅=⋅−−
+⋅−−
=
∈−⋅∈−⋅⋅
=
⋅−⋅+
+⋅−⋅⋅=⋅−−
+⋅−−
=
∈−
=
⋅−=⋅−−
+⋅−−
=
∈−
=
⋅−=⋅−−
+⋅−−
=
∈−+−⋅∈−⋅
=
⋅−+−⋅+
+⋅−⋅=⋅−−
+⋅−−
=
∈−⋅∈−+−⋅∈⋅
=
altfeluu
uN
uNuuNrruruN
rrruuN
altfeluuuuu
uN
uNuu
uNuuNrruruN
rrruuN
altfeluuuuuuu
uN
0)3,2[)2(
)(
)()2()()()(
0)3,2[)15143(5,0)2,1[)1(5,0
)(
)()15143(5,0
)()1(5,0)()()(
0)3,2[)3(5,0)2,1[)362(5,0)1,0[5,0
)(
2
3,4
1,42
2,557
72,4
46
43,4
2
2
3,3
1,42
1,32
2,446
62,3
35
33,3
2
2
2
3,2
<≤
= +
altfelrur
uN kkk ,0
,1)( 1
1, )()()( 1,11
1,1
, uNrr
uruN
rrru
uN tkktk
tktk
ktk
ktk −+
++
+−
−+⋅
−−
+⋅−
−=
Funcţiile de amestec pentru exemplu (o curbã B-spline cu 5 puncte de control (n=4) şi grad 2 (t=3) )
0
1
1 2 3 u
N4,3(u)
0 1
1
2 3 u
N0,3 (u)
0
1
1 2 3 u
N1,3(u)
0
1
1 2 3 u
N3,3(u)
0
1
1 2 3 u
N2,3(u)
Segmentele de curbă pentru exemplu
P2P3P4
P1P2P3
P0P1P2
Punctele care controlează forma curbei
N2,3N3,3N4,3
N1,3N2,3N3,3
N0,3N1,3N2,3
Polinoamele care controlează forma curbei
Q3Q2Q1Curba
2 31 20 1u
Curbele spline trec prin punctele extreme
∈∀===∈∀===
]3,0[,0)0(1)0(,1]4,1[,0)0(1)0(,0
3,3,4
3,3,0
iNsiNuiNsiNu
i
i
Modificarea coordonatele punctelor extreme va aveainfluenţă doar pentru u∈[0,1) respectiv pentru u∈(2,3]
Deoarece coordonatele punctelor extreme intervin doar în calitate de coeficienţiai funcţiilor de amestec N0,3 şi N4,3
Caracteristicile curbelor splineNumărul punctelor de control nu modifică gradulpolinoamelor de amestec.În noduri (între segmentele de curbă) există continuitate de ordinul 2.Se poate creşte numărul punctelor de control pentru a controla forma curbei.Curbele spline trec prin punctele extreme.Modificarea coordonatelor punctelor extreme va aveainfluenţă doar pentru u∈[0,1) respectiv pentru u∈(2,3].Specificarea mai multor puncte de control în poziţii apropiate va conduce la “atragerea” curbei spre poziţia respectivă . Pentru obţinerea unei curbe închise trebuie să se specifice primul şi ultimul punct de control având aceleaşi coordonate. Curbele spline se aşează în interiorul poligonului convexdefinit de punctele de control.
Curbele cubice B-spline• P0, P1 , ... , Pn, n ≥ 3
• n-2 (n-4+2) segmente de curbă polinomiale cubice: Q3, Q4, ... , Qn
• Curba Qi: u variază în intervalul ri ≤ u ≤ ri+1
unde i poate lua valori în intervalul 3 ≤ i ≤ n
• Nodurile sunt definite de parametrul ri, i ≥ 4 şi suntpunctele de contact între curbele Qi-1 şi Qi
• Numărul total de noduri: n-1 ((n-t+2)-1)
• Fiecare segment de curbă (Qi) este definit de 4(t)puncte de control
• Qi este definită de punctele de control Pi-3, Pi-2 , Pi-1 , Pi
Vectorul de geometrie pentru segmentul de curbă Qi
=−
−
−
i
i
i
i
Bsi
PPPP
G1
2
3
3≤ i ≤ n
rn=n-3, rn+1=n-2
u [n-3,n-2]
Pn-3,Pn-2,Pn-1,Pn
Qn
ri=i-3, ri+1=i-2
u [i-3, i-2]
Pi-3,Pi-2,Pi-1,Pi
Qi
r4=1, r5=2
u [1, 2]
P1,P2,P3,P4
Q4
r3=0, r4=1
u [0, 1]
P0,P1,P2,P3
Q3
Ecuaţia matriceală pentru un segment de curbă cubică B-spline
iBsBsii GMUuQ ⋅⋅=)(
[ ]
⋅
−−
−−
⋅⋅−−−=−
−
−
i
i
i
i
iiii
PPPP
rururuuQ1
2
3
23
0141030303631331
611)()()()(
ui ≤ u ≤ ui+1unde
Curbele Beta-spline
• Parametrii beta-1 şi beta-2
• Cei doi parametrii sunt folosiţi pentru a ajusta forma curbei relativ la apropierea sa faţă de poligonul convex definit de punctele de control.
• Pentru anumite valori ale parametrilor beta-1 şi beta-2, curbele Beta-spline se reduc la curbele B-spline.
Conversia între reprezentările curbelor
SSBB GMUGMU ⋅⋅=⋅⋅
SSBB GMGM ⋅=⋅
SBSSSBB GMGMMG ⋅=⋅= −,
1
SB GG ⋅
⋅=
1410042002400141
61
BS GG ⋅
−−
−−
=
6720021001200276
Suprafeţe parametrice bicubice
• curbă parametrică: P(u) = U. M. G • P(s) = S. M. G.
⋅⋅⋅⋅
(u)G(u)G(u)G(u)G
M S = G(u) M S = u) P(s,
4
3
2
1
Gi(u) = U. M. Gi unde i = 1, 2, 3, 4
=
4
3
2
1
i
i
i
i
i
gggg
G puncte de control
Gi(u) = GiT. MT . U T =[ gi1 gi2 gi3 gi4] . MT . U T
UM M S = u) P(s, TT
44434241
34333231
24232221
14131211
⋅⋅
⋅⋅
gggggggggggggggg
UMM S = u) P(s, TT ⋅⋅⋅⋅ G cu 0 ≤ s, u ≤1
UM G M S = u) z(s,
UM G M S = u) y(s,
UM G M S = u) x(s,
TTz
TTy
TTx
⋅⋅⋅⋅
⋅⋅⋅⋅
⋅⋅⋅⋅
Suprafeţe Hermite bicubiceGH = ?
HxH GMSuPx ⋅⋅=)(
x
⋅⋅⋅⋅
(u)R(u)R(u)P(u)P
M S = (u)G M S = u) Px(s,
4
1
4
1
HHxH
s
u
u=0.0
u=0.2
u=0.4
u = 0 .6
u=0.8
u=1
P4(u)P1(u)
x
Hx
gggg
MUuP
⋅⋅=
14
13
12
11
1 )(
x
Hx
gggg
MUuP
⋅⋅=
24
23
22
21
4 )(
x
Hx
gggg
MUuR
⋅⋅=
34
33
32
31
1 )(
x
Hx
gggg
MUuR
⋅⋅=
44
43
42
41
4 )(
[ ] THxH GMUuRuRuPuP ⋅⋅=)()()()( 4141
=
44434241
34333231
24232221
14131211
gggggggggggggggg
GHx
TTHHx UMG
uRuRuPuP
⋅⋅=
)()()()(
4
1
4
1
TxH UG ⋅⋅⋅⋅ T
HH M M S = u) Px(s,
TzH UG ⋅⋅⋅⋅ T
HH M M S = u) Pz(s,
TyH UG ⋅⋅⋅⋅ T
HH M M S = u) Py(s,La fel se pot obţine:
Semnificaţia valorilor din matricea de geometrie a suprafeţei Hermite
=
)1,1()0,1()1,1()0,1(
)1,0()0,0()1,0()0,0(
)1,1()0,1()1,1()0,1(
)1,0()0,0()1,0()0,0(
22
22
usx
usx
sx
sx
usx
usx
sx
sx
ux
uxxx
ux
uxxx
GHx
∂∂∂
∂∂∂
∂∂
∂∂
∂∂∂
∂∂∂
∂∂
∂∂
∂∂
∂∂
∂∂
∂∂
GHx (1,1)
GHx (1,2) GHx (2,2)
GHx (2,1)GHx(3,1)
GHx (3,2)
GHx (4,2)
GHx(4,3)GHx (1,3)
GHx (1,4) GHx (4,4)
GHx(2,3)
GHx (3,3)
GHx (3,4)
GHx (2,4)
GHx (4,1)u
s
Asigurarea continuităţii între două suprafeţe Hermite
44434241
34333231
24232221
14131211
gggggggggggggggg
−−−−
−−−−
44434241
24232221
kgkgkgkg
gggg• Continuitate G1
s
u
suprafaţa 2
suprafaţa 1
u=1
u=1
u=0
u=0
s=1s=1
s=0
s=0
Suprafeţe Bézier∑∑= =
⋅⋅=m
i
n
k
nkmiki vBuBpvuP0 0
,,, )()(),(
Două suprafeţe Bézier construite pentrua) m=2 n=3 b) m=3 n=4
a) b)
(m+1)x(n+1) puncte de control
Continuitate geometrică de ordinul 1 între două suprafeţe Bezier
a
b
Curba de contact
P9
P8P7P10
P11P12
P6P5
P4P3
P2
P1
k = a/b: (P1, P2, P3)(P4, P5, P6)(P7, P8, P9)(P10, P11, P12)
Suprafeţe spline
∑∑= =
⋅⋅=m
j
n
k
tksjkj vNuNpvuP0 0
,,, )()(),(
(m+1).(n+1) puncte de control
Afişarea suprafeţelor bicubice (reprezentarewireframe) - Procedură iterativă
void Desenează_Suprafaţa (MAT_COEF coef, int ns, int nu, int n){double s, u, d, ds, du;d = 1/(double)n;ds = 1/(double)(ns-1);du = 1/(double)(nu-1);// procedurile X, Y şi Z determină coordonatele unui punct de pe suprafaţă//pe baza parametrului coeffor (s=0; s<=1; s += ds) // desenează curbele cu parametru s constant
{ moveto_3D ( X(s, 0), Y(s,0), Z(s, 0) );for (u = 0; u<=1; u += d)lineto_3D (X(s, u), Y(s, u), Z(s, u));}
for (u=0; u<=1; u += du) // desenează curbele cu parametru u constant{ moveto_3D ( X(0, u), Y(0, u), Z(0, u) );for (s = 0; u<=1; u += d)lineto_3D (X(s, u), Y(s, u), Z(s, u));}
}
typedef float MAT_COEF [4][ 4][ 3];
Procedură recursivă (echivalentul algoritmului de înjumătăţirea intervalelor )
procedura Deseneaza_Suprafaţa ( suprafata, e)dacă test (suprafata, e) atunci desenează_patrulater (suprafata)altfel
divide_suprafata_in_patru_suprafeţe (suprafata, supf_st_st,supf_st_dr, supf_dr_st, supf_dr_dr,)
Deseneaza_Suprafaţa (supf_st_st, e) Deseneaza_Suprafaţa (supf_st_dr, e) Deseneaza_Suprafaţa (supf_dr_st, e) Deseneaza_Suprafaţa (supf_dr_dr, e)
Test (suprafata, e) <=> este suprafata aproximativ plană şi marginile ei aproximativ drepte?
st_dr
dr_dr
st_st
dr_st
s
uu=0,5
s = 0,5
(1, 0)
(1, 1)(0, 1)
(s, u)=(0, 0)
Stabilirea suprafeţelor de reprezentat în varianta recursivă
Normalele la o suprafaţă bicubică
TT2
TTTT
UMM 0]12s3s[=
=UMM (S)s
=)UMM (Ss
= u) P(s,s
⋅⋅⋅⋅
⋅⋅⋅⋅⋅⋅⋅⋅=
G
GGVs ∂∂
∂∂
∂∂r
T
u
G
GGu
V
0]12u3u[MM S=
=)(Uu
MM S =)UMM (Su
= u) P(s,
2T
TTTT
⋅⋅⋅⋅
⋅⋅⋅⋅⋅⋅⋅⋅=∂∂
∂∂
∂∂r
[ ]suussuussuusus yxyxxzxzzyzyVVN ⋅−⋅⋅−⋅⋅−⋅=×=rrr
Suprafeţe cvadrice
0222222),,( 222
=++++++++++=
kjzhygxfxzeyzdxyczbyaxzyxf
[ ]
⋅
⋅
1
1= z) y, f(x,zyx
kjhgjcefhebdgfda
zyx
dzdf
dydf
dxdf
11)(' −− ⋅⋅= MQMQ T
Normala la o suprafaţă cvadrică
Q
Matricea transformării geometrice
Reprezentarea suprafeţelor utilizând funcţii de douã variabile
b)
a)
y = f(x, z)
Memorarea valorilor funcţiei y = F(x, z)
→
→→
↓↓↓
nnn
n
n
n
n
yyy
yyyyyy
z
zz
xxx
221
22221
11211
2
1
21
.
.
........
.....
Recommended