CURS3_Curbe Si Supf Parametrice2

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