Sunteți pe pagina 1din 65

CURS 3 CURS 4

Reprezentarea prin suprafee


de frontier
A. Prin suprafee de frontier
Reprezentarea poligonal
Reprezentarea liniilor i a suprafeelor curbe
folosind ecuaii parametrice
Reprezentarea obiectelor cu simetrie de rotaie
sau de translaie prin baleiere spaial
Reprezentarea suprafeelor cvadrice
Reprezentarea suprafeelor utiliznd funcii de
dou variabile
Reprezentarea liniilor i a suprafeelor
curbe folosind ecuaii parametrice
O curb tridimensional poate fi
reprezentat prin perechea de funcii:
y = f (x)
z = g (x)
Dezavantajele metodei
Ecuaiile clasice ale unei curbe 3D
Ecuaiile 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
.
), 2 cos( ) ( u r u x =
), 2 sin( ) ( u r u y =
z(u) = 0
Continuitatea n punctele de
contact
Continuitate
geometric
de ordinul 0
G
0
Continuitate
geometric
de ordinul 1
G
1
V1=k
.
V2
Pantele vectorlor
tangeni sunt egale
Continuitate
parametric
de ordinul 1
C
1
V1=V2
Vectori tangeni
egali
Derivate de
ordinul I egale
Continuitate
parametric
de ordinul 2
C
2
Derivate de
ordinul II
egale
Ecuaiile parametrice pentru
suprafee
P(u, v)=(x(u, v), y(u, v), z(u,v))
Exemplu (ecuaia parametric a sferei):
), 2 cos( ) sin( ) , ( v u r v u x =
), 2 sin( ) sin( ) , ( v u r v u y =
), cos( ) , ( u r v u z =
v
u
x
y
z
s-au interpolat punctele de control
ecuaiile aproximeaz suprafeele sau curbele
Curbe parametrice polinomiale
x = x(u)
P(u) y = y(u)
z = z(u)
Exemplu: curbe parametrice cubice (grad 3 n u)
z z z z
y y y y
x x x x
d u c u b u a u z
d u c u b u a u y
d u c u b u a u x
+ + + =
+ + + =
+ + + =
2 3
2 3
2 3
) (
) (
) (
unde 0 u 1
Forma matriceal a ecuaiilor
curbelor parametrice cubice
P(u) = [x(u) y(u) z(u)] = U
.
C
U = [u3 u2 u 1]
(
(
(
(
(

=
z y x
z y x
z y x
z y x
d d d
c c c
b b b
a a a
C
continuare
C = M
.
G
(
(
(
(

=
44 43 42 41
34 33 32 31
24 23 22 21
14 13 12 11
m m m m
m m m m
m m m m
m m m m
M
| |
z y x
G G G G=
C = M
.
[Gx Gy Gz]
Gx, Gy, Gz - vectori de geometrie
G - matrice de geometrie
x(u) = U
.
M
.
Gx
y(u) = U
.
M
.
Gy
z(u) = U
.
M
.
Gz
x x
x x
g m um m u m u g m um m u m u
g m um m u m u g m um m u m u u x
4 44 34 24
2
14
3
3 43 33 23
2
13
3
2 42 32 22
2
12
3
1 41 31 21
2
11
3
) ( ) (
) ( ) ( ) (
+ + + + + + +
+ + + + + + + + =
Polinoamele de amestec: B = U
.
M
z z
z z
g m um m u m u g m um m u m u
g m um m u m u g m um m u m u u z
4 44 34 24
2
14
3
3 43 33 23
2
13
3
2 42 32 22
2
12
3
1 41 31 21
2
11
3
) ( ) (
) ( ) ( ) (
+ + + + + + +
+ + + + + + + + =
y y
y y
g m um m u m u g m um m u m u
g m um m u m u g m um m u m u u y
4 44 34 24
2
14
3
3 43 33 23
2
13
3
2 42 32 22
2
12
3
1 41 31 21
2
11
3
) ( ) (
) ( ) ( ) (
+ + + + + + +
+ + + + + + + + =
Metode de reprezentare a curbelor
Reprezentarea curbelor prin segmente
de dreapt
Metod recursiv de reprezentare a
curbelor prin njumtirea intervalelor
de reprezentat
e
Reprezentarea curbelor prin
segmente de dreapt
typedef float VECT_C [4];
void moveto_3D (float, float, float);
// poziioneaz 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 parametric
prin 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 curbei
for (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 curbelor
prin njumtirea intervalelor de reprezentat
procedura Deseneaza_Curba ( curba, e)
dac test (curba, e) atunci
deseneaz_dreapta (curba)
altfel
divide_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 - definete familia de curbe
G - definete geometria curbei n cadrul
aceleiai familii
Hermite
Curbe Bzier
spline
Curbe cubice Hermite
(
(
(
(

=
x
x
x
x
Hx
R
R
P
P
G
4
1
4
1
Hx H
Hx H x x x x
G M u u u
G M U d u c u b u a u x
=
= = + + + =
] 1 [
) (
2 3
2 3
Hx H x
Hx H x
G M P x
G M P x
= =
= =
] 1 1 1 1 [ ) 1 (
] 1 0 0 0 [ ) 0 (
4
1
Hx H
G M u u u x = ] 0 1 2 3 [ ) ( '
2
Hx H x
Hx H x
G M R x
G M R x
= =
= =
] 0 1 2 3 [ ) 1 ( '
] 0 1 0 0 [ ) 0 ( '
4
1
Hx H
x
x
x
x
Hx
G M
R
R
P
P
G
(
(
(
(

=
(
(
(
(

=
0 1 2 3
0 1 0 0
1 1 1 1
1 0 0 0
4
1
4
1
(
(
(
(



=
(
(
(
(

0 0 0 1
0 1 0 0
1 2 3 3
1 1 2 2
0 1 2 3
0 1 0 0
1 1 1 1
1 0 0 0
1
H
M
| |
4
2 3
1
2 3
4
2 3
1
2 3
) ( ) 2 (
) 3 2 ( ) 1 3 2 (
) ( ) ( ) ( ) (
R u u R u u u
P u u P u u
G B G M U u z u y u x u P
H H H H
+ + +
+ + + + =
= = = =
Curbe cubice Hermite
Continuitatea n punctele de contact
(
(
(
(

(
(
(
(

7
4
7
4
4
1
4
1
;
R
kR
P
P
R
R
P
P
Continuitate geometric de ordinul I G
1
P7
P4
P1
Continuitate parametric de ordinul I C
1
(
(
(
(

(
(
(
(

7
4
7
4
4
1
4
1
;
R
R
P
P
R
R
P
P
R1
R4
kR4
R7
Curbe Bzier
p
k
= (x
k
, y
k
, z
k
)
k=0, 1, 2, ...n

=
=
n
k
n k k u B p u P
0
, ) ( ) (
k n
k
n k
u u k n C u B

= ) 1 ( ) , ( ) (
,
)! ( !
!
) , (
k n k
n
k n C

=

=
=
n
k
n k k
u B x u x
0
,
) ( ) (

=
=
n
k
n k k
u B y u y
0
,
) ( ) (

=
=
n
k
n k k
u B z u z
0
,
) ( ) (
P(u)
2
2 1
2
0
2
2 , 2
2 , 1
2
2 , 0
) 1 ( 2 ) 1 ( ) (
) (
) 1 ( 2 ) (
) 1 ( ) (
u p u u p u p u P
u u B
u u u B
u u B
+ + =
=
=
=
2
2 1
2
0
2
2 1
2
0
2
2 1
2
0
) 1 ( 2 ) 1 ( ) (
) 1 ( 2 ) 1 ( ) (
) 1 ( 2 ) 1 ( ) (
u z u u z u z u z
u y u u y u y u y
u x u u x u x u x
+ + =
+ + =
+ + =
Pentru n = 2, deci pentru 3 puncte de control.
i explicit
Exemplu
3
3
2
2
1
2
0
3
) 1 ( 3 ) 1 ( 3 ) 1 ( ) ( P u P u u P u u P u u P + + + =
Pentru n = 3, deci pentru 4 puncte de control.
Funciile de amestec pentru o curb Bezier cu
4 puncte de control (n=3)
0 0 0 0 1 1
1 1 1 1
1 1 u u u u
B
0,3
(u)
B
2,3
(u) B
1,3
(u) B
3,3
(u)
3
3
2
2
1
2
0
3
) 1 ( 3 ) 1 ( 3 ) 1 ( ) ( P u P u u P u u P u u P + + + =
Curbe cubice Bezier
3
3 , 3
2
3 , 2
2
3 , 1
3
3 , 0
) (
) 1 ( 3 ) (
) 1 ( 3 ) (
) 1 ( ) (
u u B
u u u B
u u u B
u u B
=
=
=
=
3
3
2
2
1
2
0
3
) 1 ( 3 ) 1 ( 3 ) 1 ( ) ( P u P u u P u u P u u P + + + =
| |
(
(
(
(

(
(
(
(



=
3
2
1
0
2 3
0 0 0 1
0 0 3 3
0 3 6 3
1 3 3 1
1 ) (
P
P
P
P
u u u u P
1. Curbele Bzier trec prin punctele de control extreme care definesc
curba (p0, p3)
0 3 , 0 0
) ( p B p u P = =
n u=0
3
) ( p u P =
n u=1
3
3
2
2
1
2
0
3
) 1 ( 3 ) 1 ( 3 ) 1 ( ) ( P u P u u P u u P u u P + + + =
2. Primele i ultimele dou puncte de control aparin tangentelor
n extremiti
P0
P0
P2
P2
P3
P3
P1
P1
P0
P2
P1
P0
P2
P3
P1
P0
P2
P3
P1
P0
P2
P3
P1
P0
P2
P1
P0
P2
P3
P1
3. Curbele Bzier se aeaz n interiorul conturului poligonal convex
definit de punctele de control
4. Curbe nchise
Punctele extreme -P0 i P3- au aceleai 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 Bzier trec prin punctele de control extreme
care definesc curba (p0, p3)
2. Primele i ultimele dou puncte de control aparin
tangentelor n extremiti
3. Curbele Bzier se aeaz n interiorul conturului
poligonal convex definit de punctele de control
4. Curbe nchise: Punctele extreme -P0 i P3- au
aceleai coordonate
5. Un punct n vecintatea cruia se definesc mai multe
puncte de control va atrage curba spre el.
u
u
k
k n
B B
u
u
k
k n
B
u
u
u
u
k n C
k n C
B B
u u k n C B
u u k n C B
n k n k
n k
k n
k n
k
k
n k n k
k n k
n k
k n k
n k

+
=

+
=
=

=
=
=

1
1
1
1
) 1 (
) 1 (
) 1 , (
) , (
) 1 ( ) , (
) 1 ( ) 1 , (
, 1 ,
, 1
1 1
, 1 ,
,
1 1
, 1
Reprezentarea curbelor Bezier
// procedura de determinare a coordonatelor x i y pentru o curb Bzier,
// n punctul de parametru u
void Bezier (double u, int *x, int *y)
{
double B;
int k;
if (u==0) { *x= P[0].x; *y= P[0].y; return; }
//curba Bzier trece prin punctele extreme
if (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
//relaia recursiv de determinare a lui B
for (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 funcia Bezier, pe
//poriunea definit de u=umin i u=umax i cu o variaie a lui u definit de pas
void 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 corespunztoare lui umax
if (incep_x!=x || incep_y!=y)
lineto(x, y);
}
Reprezentarea curbelor Bezier
Curbe spline

=
=
n
k
t k k u N p u P
0
, ) ( ) (
Funciile de amestec Nk,t sunt polinoame de gradul (t-1),
independent de numrul punctelor de control.
u variaz n intervalul: 0 (n-t+2)
Numrul total al segmentelor de curb: (n-t+2).
Fiecare din aceste curbe va fi controlat (ca i form) de t puncte de
control
Numrul punctelor de control: (n+1).

<
=
+
altfel
r u r
u N
k k
k
, 0
, 1
) (
1
1 ,
) ( ) ( ) (
1 , 1
1
1 ,
1
,
u N
r r
u r
u N
r r
r u
u N
t k
k t k
t k
t k
k t k
k
t k +
+ +
+

=
rj - valori nodale,
punctele corespunztoare lor pe o curb B-spline sunt numite noduri
Exemplu: n = 6 i t = 4
n + t = 10 numrul subintervalelor
0, 0, 0, 0, 1, 2, 3, 4, 4, 4, 4 valorile nodale
5 numrul nodurilor
[0, 4] intervalul de variaie al lui u
n - t + 2 = 4 numrul segmentelor de curb
t -1 = 3 gradul polinoamelor de amestec
n + 1 = 7 numrul punctelor de control:
Valorile nodale pentru curbele B-
spline uniforme
pentru valori ale lui j n domeniul 0 (n+t)

> > + +
+
<
=
n j t n pentru t n
n j t pentru t j
t j pentru
r
j
2
1
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))
N
0,1
N
0,2
N
0,3
N
0,4
N
1,1
N
1,2
N
1,3
N
1,4
N
2,1
N
2,2
N
2,3
N
2,4
N
3,1
N
3,2
N
3,3
N
3,4
N
4,1
N
4,2
N
4,3
N
4,4
N
5,1
N
5,2
N
5,3
N
5,4

<
=
+
altfel
r u r
u N
k k
k
, 0
, 1
) (
1
1 ,
) ( ) ( ) (
1 , 1
1
1 ,
1
,
u N
r r
u r
u N
r r
r u
u N
t k
k t k
t k
t k
k t k
k
t k +
+ +
+

=
Calculul polinoamelor (pentru exemplu)
Polinoamele de grad 0:

=
=

=
=
altfel
u
u N
altfel
u
u N
altfel
u
u N
altfel
u
u N
altfel
u
u N
0
) 3 , 2 [ 1
) (
0
) 2 , 1 [ 1
) (
0
) 1 , 0 [ 1
) (
0
0 1
) (
0
0 1
) (
1 , 4
1 , 3
1 , 2
1 , 1
1 , 0
) ( ) 2 ( ) ( ) ( ) (
) ( ) 3 ( ) ( ) 1 ( ) ( ) ( ) (
) ( ) 2 ( ) ( ) ( ) ( ) (
) ( ) 1 ( ) ( ) ( ) (
0 ) ( ) ( ) (
1 , 4 1 , 5
5 6
6
1 , 4
4 5
4
2 , 4
1 , 4 1 , 3 1 , 4
4 5
5
1 , 3
3 4
3
2 , 3
1 , 3 1 , 2 1 , 3
3 4
4
1 , 2
2 3
2
2 , 2
1 , 2 1 , 2
2 3
3
1 , 1
1 2
1
2 , 1
1 , 1
1 2
2
1 , 0
0 1
0
2 , 0
u N u u N
r r
u r
u N
r r
r u
u N
u N u u N u u N
r r
u r
u N
r r
r u
u N
u N u u N u u N
r r
u r
u N
r r
r u
u N
u N u u N
r r
u r
u N
r r
r u
u N
u N
r r
u r
u N
r r
r u
u N
=

=
+ =

=
+ =

=
=

=
=

=
Polinoamele de grad 1:

<
=
+
altfel
r u r
u N
k k
k
, 0
, 1
) (
1
1 ,
) ( ) ( ) (
1 , 1
1
1 ,
1
,
u N
r r
u r
u N
r r
r u
u N
t k
k t k
t k
t k
k t k
k
t k +
+ +
+

=
Polinoamele de grad 2:
) ( ) 3 ( 5 , 0
) ( ) 3 6 2 ( 5 , 0
) ( 5 , 0 ) ( ) ( ) (
0
) 2 , 1 [ ) 2 ( 5 , 0
) 1 , 0 [ ) 3 4 ( 5 , 0
) (
) ( ) 2 ( 5 , 0
) 3 4 ( 5 , 0 ) ( ) ( ) (
0
) 1 , 0 [ ) 1 (
) (
) ( ) 1 ( ) ( ) ( ) (
1 , 4
2
1 , 3
2
1 , 2
2
2 , 3
3 5
5
2 , 2
2 4
2
3 , 2
2
3 , 1
1 , 3
2
1 , 2 2 , 2
2 4
4
2 , 1
1 3
1
3 , 1
2
3 , 0
1 , 2
2
2 , 1
1 3
3
2 , 0
0 2
0
3 , 0
u N u
u N u u
u N u u N
r r
u r
u N
r r
r u
u N
altfel
u u
u u u
u N
u N u
N u u u N
r r
u r
u N
r r
r u
u N
altfel
u u
u N
u N u u N
r r
u r
u N
r r
r u
u N

+ + +
+ =



=
+
+ =


=
=


=
=

+

=
+ +
+ =


+

=
altfel
u u
u N
u N u u N
r r
u r
u N
r r
r u
u N
altfel
u u u
u u
u N
u N u u
u N u u N
r r
u r
u N
r r
r u
u N
altfel
u u
u u u
u u
u N
0
) 3 , 2 [ ) 2 (
) (
) ( ) 2 ( ) ( ) ( ) (
0
) 3 , 2 [ ) 15 14 3 ( 5 , 0
) 2 , 1 [ ) 1 ( 5 , 0
) (
) ( ) 15 14 3 ( 5 , 0
) ( ) 1 ( 5 , 0 ) ( ) ( ) (
0
) 3 , 2 [ ) 3 ( 5 , 0
) 2 , 1 [ ) 3 6 2 ( 5 , 0
) 1 , 0 [ 5 , 0
) (
2
3 , 4
1 , 4
2
2 , 5
5 7
7
2 , 4
4 6
4
3 , 4
2
2
3 , 3
1 , 4
2
1 , 3
2
2 , 4
4 6
6
2 , 3
3 5
3
3 , 3
2
2
2
3 , 2

<
=
+
altfel
r u r
u N
k k
k
, 0
, 1
) (
1
1 ,
) ( ) ( ) (
1 , 1
1
1 ,
1
,
u N
r r
u r
u N
r r
r u
u N
t k
k t k
t k
t k
k t k
k
t k +
+ +
+

=
Funciile 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
N
4,3
(u)
0 1
1
2 3
u
N
0,3
(u)
0
1
1 2 3
u
N
1,3
(u)
0
1
1 2 3 u
N
3,3
(u)
0
1
1 2 3
u
N
2,3
(u)
Segmentele de curb pentru exemplu
P
2
P
3
P
4
P
1
P
2
P
3
P
0
P
1
P
2
Punctele care
controleaz
forma curbei
N
2,3
N
3,
3
N
4,3
N
1,3
N
2,3
N
3,3
N
0,3
N
1,3
N
2,3
Polinoamele care
controleaz
forma curbei
Q3 Q2 Q1 Curba
2 3 1 2 0 1 u
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
i N si N u
i N si N u
i
i
Modificarea coordonatele punctelor extreme va avea
influen doar pentru u[0,1) respectiv pentru u(2,3]
Deoarece coordonatele punctelor extreme intervin doar n calitate de coeficieni
ai funciilor de amestec N0,3 i N4,3
Caracteristicile curbelor spline
Numrul punctelor de control nu modific gradul
polinoamelor de amestec.
n noduri (ntre segmentele de curb) exist continuitate de
ordinul 2.
Se poate crete numrul punctelor de control pentru a
controla forma curbei.
Curbele spline trec prin punctele extreme.
Modificarea coordonatelor punctelor extreme va avea
influen doar pentru u[0,1) respectiv pentru u(2,3].
Specificarea mai multor puncte de control n poziii apropiate
va conduce la atragerea curbei spre poziia respectiv .
Pentru obinerea unei curbe nchise trebuie s se specifice
primul i ultimul punct de control avnd aceleai coordonate.
Curbele spline se aeaz n interiorul poligonului convex
definit de punctele de control.
Curbele cubice B-spline
P
0
, P
1
, ... , P
n
, n 3
n-2 (n-4+2) segmente de curb polinomiale cubice: Q
3
,
Q
4
, ... , Q
n
Curba Q
i
: u variaz n intervalul r
i
u r
i+1
unde i poate lua valori n intervalul 3 i n
Nodurile sunt definite de parametrul r
i
, i 4 i sunt
punctele de contact ntre curbele Q
i-1
i Q
i
Numrul total de noduri: n-1 ((n-t+2)-1)
Fiecare segment de curb (Q
i
) este definit de 4(t)
puncte de control
Q
i
este definit de punctele de control P
i-3
, P
i-2
, P
i-1
, P
i
Vectorul de geometrie pentru segmentul de curb Qi
(
(
(
(

i
i
i
i
Bsi
P
P
P
P
G
1
2
3
3 i n
r
n
=n-3, r
n+1
=n-2
u [n-3,n-2]
P
n-3
,P
n-2
,P
n-1
,P
n
Q
n
r
i
=i-3, r
i+1
=i-2
u [i-3, i-2]
P
i-3
,P
i-2
,P
i-1
,P
i
Q
i
r
4
=1, r
5
=2
u [1, 2]
P
1
,P
2
,P
3
,P
4
Q
4
r
3
=0, r
4
=1
u [0, 1]
P
0
,P
1
,P
2
,P
3
Q
3
Ecuaia matriceal pentru un segment de
curb cubic B-spline
i
Bs Bs i i
G M U u Q = ) (
| |
(
(
(
(

(
(
(
(

i
i
i
i
i i i i
P
P
P
P
r u r u r u u Q
1
2
3
2 3
0 1 4 1
0 3 0 3
0 3 6 3
1 3 3 1
6
1
1 ) ( ) ( ) ( ) (
ui u ui+1 unde
Curbele Beta-spline
Parametrii beta-1 i beta-2
Cei doi parametrii sunt folosii 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 reprezentrile curbelor
S S B B
G M U G M U =
S S B B
G M G M =
S B S S S B B
G M G M M G = =

,
1
S B
G G
(
(
(
(

=
1 4 1 0
0 4 2 0
0 2 4 0
0 1 4 1
6
1
B S
G G
(
(
(
(

=
6 7 2 0
0 2 1 0
0 1 2 0
0 2 7 6
Suprafee 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
G
i
(u) = U
.
M
.
Gi unde i = 1, 2, 3, 4
(
(
(
(

=
4
3
2
1
i
i
i
i
i
g
g
g
g
G
puncte de control
G
i
(u) = G
i
T
. M
T
. U
T
=[ g
i1
g
i2
g
i3
g
i4
] . M
T
. U
T
U M M S = u) P(s,
T T
44 43 42 41
34 33 32 31
24 23 22 21
14 13 12 11

(
(
(
(


g g g g
g g g g
g g g g
g g g g
U M M S = u) P(s,
T T
G
cu 0 s, u 1
U M G M S = u) z(s,
U M G M S = u) y(s,
U M G M S = u) x(s,
T T
z
T T
y
T T
x



Suprafee Hermite bicubice
G
H
= ?
Hx H
G M S u Px = ) (
x
(
(
(
(


(u) R
(u) R
(u) P
(u) P
M S = (u) G M S = u) Px(s,
4
1
4
1
H Hx H
s
u
u=0.0
u=0.2
u=0.4
u = 0 . 6
u=0.8
u=1
P4(u) P1(u)
x
H x
g
g
g
g
M U u P
(
(
(
(

=
14
13
12
11
1
) (
x
H x
g
g
g
g
M U u P
(
(
(
(

=
24
23
22
21
4
) (
x
H x
g
g
g
g
M U u R
(
(
(
(

=
34
33
32
31
1
) (
x
H x
g
g
g
g
M U u R
(
(
(
(

=
44
43
42
41
4
) (
| |
T
Hx H
G M U u R u R u P u P = ) ( ) ( ) ( ) (
4 1 4 1
(
(
(
(

=
44 43 42 41
34 33 32 31
24 23 22 21
14 13 12 11
g g g g
g g g g
g g g g
g g g g
G
Hx
T
T
H
Hx
U M G
u R
u R
u P
u P
=
(
(
(
(

) (
) (
) (
) (
4
1
4
1
T
x
H
U G
T
H H
M M S = u) Px(s,
T
z
H
U G
T
H H
M M S = u) Pz(s,
T
y
H
U G
T
H H
M M S = u) Py(s,
La fel se pot obine:
Semnificaia valorilor din matricea de geometrie a
suprafeei 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 (
2 2
2 2
u s
x
u s
x
s
x
s
x
u s
x
u s
x
s
x
s
x
u
x
u
x
x x
u
x
u
x
x x
G
Hx

G
Hx
(1,1)
G
Hx
(1,2)
G
Hx
(2,2)
G
Hx
(2,1)
G
Hx
(3,1)
G
Hx
(3,2)
G
Hx
(4,2)
G
Hx
(4,3)
G
Hx
(1,3)
G
Hx
(1,4)
G
Hx
(4,4)
G
Hx
(2,3)
G
Hx
(3,3)
G
Hx
(3,4)
G
Hx
(2,4)
G
Hx
(4,1)
u
s
Asigurarea continuitii ntre dou suprafee Hermite
(
(
(
(

44 43 42 41
34 33 32 31
24 23 22 21
14 13 12 11
g g g g
g g g g
g g g g
g g g g
(
(
(
(



44 43 42 41
24 23 22 21
kg kg kg kg
g g g g
Continuitate G1
s
u
suprafaa 2
suprafaa 1
u=1
u=1
u=0
u=0
s=1
s=1
s=0
s=0
Suprafee Bzier

= =
=
m
i
n
k
n k m i k i v B u B p v u P
0 0
, , , ) ( ) ( ) , (
Dou suprafee Bzier construite pentru
a) 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 suprafee Bezier
a
b
Curba de contact
P9
P8
P7
P10
P11
P12
P6
P5
P4
P3
P2
P1
k = a/b:
(P1, P2, P3)
(P4, P5, P6)
(P7, P8, P9)
(P10, P11, P12)
Suprafee spline

= =
=
m
j
n
k
t k s j k j v N u N p v u P
0 0
, , , ) ( ) ( ) , (
(m+1)
.
(n+1) puncte de control
Afiarea suprafeelor bicubice (reprezentare
wireframe) - Procedur iterativ
void Deseneaz_Suprafaa (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 coef
for (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
njumtirea intervalelor )
procedura Deseneaza_Suprafaa ( suprafata, e)
dac test (suprafata, e) atunci
deseneaz_patrulater (suprafata)
altfel
divide_suprafata_in_patru_suprafee (suprafata, supf_st_st,
supf_st_dr, supf_dr_st, supf_dr_dr,)
Deseneaza_Suprafaa (supf_st_st, e)
Deseneaza_Suprafaa (supf_st_dr, e)
Deseneaza_Suprafaa (supf_dr_st, e)
Deseneaza_Suprafaa (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
u
u=0,5
s = 0,5
(1, 0)
(1, 1)
(0, 1)
(s, u)=(0, 0)
Stabilirea suprafeelor de reprezentat n varianta recursiv
Normalele la o suprafa bicubic
T T 2
T T T T
U M M 0] 1 2s 3s [ =
= U M M (S)
s
= ) U M M (S
s
= u) P(s,
s

=
G
G G V
s

r
T
u
G
G G
u
V
0] 1 2u 3u [ M M S =
= ) (U
u
M M S = ) U M M (S
u
= u) P(s,
2 T
T T T T

=

r
| |
s u u s s u u s s u u s u s
y x y x x z x z z y z y V V N = =
r r r
Suprafee cvadrice
0 2 2 2 2
2 2 ) , , (
2 2 2
= + + + + +
+ + + + + =
k jz hy gx fxz
eyz dxy cz by ax z y x f
| |
(
(
(
(

(
(
(
(

1
1 = z) y, f(x,
z
y
x
k j h g
j c e f
h e b d
g f d a
z y x
(

dz
df
dy
df
dx
df
1 1
) ( '

= M Q M Q
T
Normala la o suprafa cvadric
Q
Matricea transformrii
geometrice
Reprezentarea suprafeelor
utiliznd funcii de dou variabile
b)
a)
y = f(x, z)
Memorarea valorilor funciei y = F(x, z)
(
(
(
(
(
(


nn n
n
n
n
n
y y y
y y y
y y y
z
z
z
x x x
2 21
2 22 21
1 12 11
2
1
2 1
.
.
........
.....

S-ar putea să vă placă și