Sunteți pe pagina 1din 31

ULBS Facultatea de Stiinte Specializarea

Informatica

Geometrie
Computationala
(Curs)
Sandica Robert

ULBS Facultatea de Stiinte Specializarea


Informatica
Curs2
plot(x,y) reprezint punctul P(x,y)
vector linie x=[x1 x2 x3 ], y=[y1 y2 y3 ]
yi=C(xi) reprezentarea explicit a curbei
plot(x,y) reprezentarea perechilor (xi
, yi), i=1, 2, i unirea lor
cu segmente de dreapt
hold on
hold off
subplot(m,n,p) mparte fereastra grafic n m*n subferestre (m
linii i n coloane) i face reprezentarea n fereastra cu numrul p.
Reprezentarea vectorilor cu un pas dat:
v=vi:pas:vf - genereaz valori [vi, vi+pas, vi+2*
Considerente teoretice: Curbele explicite reprezentate in matlab sunt date de
puncetele de intrat x ,y precum in programul nostru
Date de intrare:x,y x dat prin vector
x = -2 : 0.01 : 10;
y = 3*x + 4;

Date de iesire : x,y reprezentate

Reprezentare grafica:
Programul aferent :

ULBS Facultatea de Stiinte Specializarea


Informatica
x = -2 : 0.01 : 10; %punctul x
y = 3*x + 4; %punctul y
plot (x, y)r%reprezentarea punctelor intro curba explicita

ULBS Facultatea de Stiinte Specializarea


Informatica
Curs3
Considerente teoretice: Pentru CAGD este foarte important reprezentarea
parametric a curbelor i suprafeelor. Iar noi in cele ce urmeaza von folosi vectorul t in a
creea punctele x, y

Date de intrare:vectorul t = 0: 0.01 :1, x=2*t.^2+1, y=t-1


Date de iesire : curbaele parametrice
Reprezentare grafica:

Programul aferent :
t = 0: 0.01 :1 ;%vectorul t cu pas de 0.01
x=2*t.^2+1;%creeam punctul x
y=t-1;%creeam punctul y
subplot(3,1,1)%creeam in figura 3 subfigura 1,1
plot(t,x)%reprezentam prin plot grafic t,x
subplot(3,1,2) )%creeam in figura 3 subfigura 1,2
plot(t,y) )%reprezentam prin plot grafic t,y
subplot(3,1,3) )%creeam in figura 3 subfigura 1,3
plot(x,y) )%reprezentam prin plot grafic x,y

Considerente teoretice:reprezentare unui cerc

ULBS Facultatea de Stiinte Specializarea


Informatica
Date de intrare:vectorul t punctele x,y date de funtiile aferente
Date de iesire :punctele de aflate prin functiile aferente

Reprezentare grafica
Programul afferent:
t=-10:0.01:100;
x=2*t./(1+t.^2);
y=(1-t.^2)./(1+t.^2);
plot(x,y)

Considerente teoretice:curba parametrica este data de absisa si de ordonata


adica x si y cu ajutorul vectorului t
Date de intrare:vectorul t si abscisa si ordonata adica m
Date de iesire :m care serveste drept absica si ordonata aflat prin funtia aferenta
Reprezentare grafica:

Programul aferent :
t=0:0.0001:1;%vectorul t cu pas de 0.0001
m=[6;0]*t+ [-9;-3]*t.^2+[4;4]*t.^3%punctul m care serveste drept abscisa si ordonata
plot(m(1,1:end),m(2,1:end))%reprezentarea grafica a lui m

ULBS Facultatea de Stiinte Specializarea


Informatica

Considerente teoretice:reprezentarea traiectoriei unei elici in spatiu se face cu ajutorul a


3 puncte care au diferite moduri de aflare x cu ajutorul functiei cos y cu ajutorul functiei sin
si z cu ajutorul pasului lui t
Date de intrare:vectorul t si punctele x,y,z
Date de iesire :punctele x,y,z aflate in urma folosiri fuuntilor cos sin si a pasului lui t
Reprezentare grafica:

Programul aferent :
t=0:0.01:20;
x=cos(t) %punctul x care serveste drept abscisa dat de functia cos
y=sin(t) %punctul y care serveste drept ordonata dat de functia sin
z=t%punctul z care este dat de pasul lui t
plot3(x,y,z)%reprezentarea grafica a celor 3 puncte cu ajutorul plot

ULBS Facultatea de Stiinte Specializarea


Informatica

Curs4
Considerente teoretice: Polinoamele lui Bernstein
n

n
(1 t ) n i t i ; t [0,1]; i 0,1,..., n
i

Bi (t )
Polinoamele definite prin relaiile:

coeficieni binomiali;
n.

n
n!

i!( n i )!
i

(cu

n
c ni
i

), poart denumirea de polinoamele lui Bernstein de grad

Polinoamele lui Bernstein formeaz o baz pentru spaiul polinoamelor de grad n.


Deci, orice polinom de grad n se poate scrie ca o combinaie liniar de polinoame ale lui
Bernstein, adic exist constantele a 0, a1, ...,an, nu toate nule, astfel nct:

Date de intrare: programul diferite valori a punctelor de control obinet diferite tipuri de curbe:

1)
2)
3)
4)
5)
6)
7)

Concav: b=[0 3 6 9;0 6 6 0]


Convex: b=[0 3 6 9;6 0 0 6]
Cu punct de inflexiune: b=[0 3 6 9;1 9 0 6]
Cu punct unghiular: b=[0 15 2 12;1 8 7 0]
Cu bucl: b=[0 15 2 8;1 8 7 0]
nchis: b=[0 3 6 0;0 6 3 0]
Dreapt: b=[0 1 2 3;0 2 4 6]

Date de iesire : datele de iesire sunt punctele de control calculate prin folmula
n
n i i
(1 t ) t ; t [0,1]; i 0,1,..., n
i

Bi (t )
n

, n matricea f vom avea coordonatele punctelor de pe curba

bezier de grad 3, cu ajutorul crora vom reprezenta grafic curba utiliznd funcia plot.
Reprezentare grafica:

ULBS Facultatea de Stiinte Specializarea


Informatica

1)

2)

3)

4)

ULBS Facultatea de Stiinte Specializarea


Informatica

5)

6)

7)
Programul aferent :

t=0:0.01:1; % parametrul
B0 = (1-t).^3;%punctul B0 creat prin formula pol. Berstain
B1=3*t.*(1-t).^2; %punctul B1 creat prin formula pol. Berstain
B2=3*(1-t).*t.^2; %punctul B2 creat prin formula pol. Berstain
B3=t.^3; %punctul B3 creat prin formula pol. Berstain
% punctele de control
% pentru curba bezier concava
b=[0 3 6 9;0 6 6 0];%matricea punctelor x,y a punctelor de control B0 B1 B2 B3
B=[B0;B1;B2;B3];%matricea punctelor de control
F=b*B;%
hold on;
plot(b(1,:),b(2,:));
plot(F(1,:),F(2,:),'r-');
hold off;

ULBS Facultatea de Stiinte Specializarea


Informatica
Considerente teoretice:polinomul de interpolare a functie exponentiale se formeaza cu
ajutorul punctelor de control B1 B2 B3 si cu ajutorul functiilor f1 f2 f3 f4 care servesc drept
coeficineti a punctelor de control
Date de intrare:punctele de control B1 B2 B3 impreuna cu vectorul x
Date de iesire : matricea b care contine abscisele si ordonatele punctelor de control a
poligounului de control
Reprezentare grafica:

Programul aferent :
%title('Polinomul de interpolare Bernstein a functiei exponentiale')
x=0:0.01:1;%vectorul x care serveste pentru a creea punctele de control
B1=(1-x).^3;%punctul de control B1 dat de fomula aferenta
B2=3*(1-x).^2.*x; %punctul de control B2 dat de fomula aferenta
B3=3*(1-x).*x.^2; %punctul de control B3 dat de fomula aferenta B4=x.^3;
f1=1;%functia f1 care serveste drept coeficient al punctului de control b1
f2=exp(1/3); %functia f2 care serveste drept coeficient al punctului de control b2
f3=exp(2/3); %functia f3 care serveste drept coeficient al punctului de control b3
f4=exp(1); %functia f4 care serveste drept coeficient al punctului de control b4
Bnf=f1*B1+B2*f2+B3*f3+B4*f4;
E=exp(x);%se face exponentiala x
plot(x,Bnf,x,E,'r')%afisam cu rosu punctul x matricea Bnf functia exponentiala

Considerente teoretice:definite mai sus

Date de intrare:punctele B0 B1B2 B0 B3 date de relatiile lor


Date de iesire : B0 B1B2 B0 B3 care au fost aflate in urma executarii poreatiilor aferente
Reprezentare grafica:

10

ULBS Facultatea de Stiinte Specializarea


Informatica

Programul aferent :
OBSERVATIE acest program contine elemente comentate mai sus va rog consultati
programele de mai sus
%title('Baza Bernstein si baza monomiala')
t=0:0.01:1;
B1=(1-t).^3;
B2=3*(1-t).^2.*t;
B3=3*(1-t).*t.^2;
B4=t.^3;
subplot(4,2,1)
plot(t,B1)
subplot(4,2,3)
plot(t,B2)
subplot(4,2,5)
plot(t,B3)
subplot(4,2,7)
plot(t,B4)
subplot(4,2,2)
plot(t,1)
subplot(4,2,4)
plot(t,t)
subplot(4,2,6)
plot(t,t.^2)
subplot(4,2,8)
plot(t,t.^3)
hold off

Considerente teoretice:in continuare vom reprezenta patru curbe cu ajutorul pol berstein
Date de intrare:sunt punctele B0 B1B2 B0 B3
Date de iesire : B0 B1B2 B0 B3 care sunt aflate din functiile lor aferetne
Reprezentare grafica:

11

ULBS Facultatea de Stiinte Specializarea


Informatica

Programul aferent :
OBSERVATIE:acest program contine elemente comentate mai sus va rog consultati
progrmaele de mai sus
%title('Baza Bernstein si baza monomiala')
t=0:0.01:1;
B1=(1-t).^3;
B2=3*(1-t).^2.*t;
B3=3*(1-t).*t.^2;
B4=t.^3;
subplot(2,1,1)%creeam o figura 2x2 si folosim
hold on
plot(t,B1,'b') %reprezentam grafic pasul t si
plot(t,B2,'r') %reprezentam grafic pasul t si
plot(t,B3,'g') %reprezentam grafic pasul t si
plot(t,B4,'k') %reprezentam grafic pasul t si
hold off
subplot(2,1,2)%folosim figura 1,2
hold on
plot(t,1.01,'b') %reprezentam grafic pasul t
plot(t,t,'r') %reprezentam grafic pasul t
plot(t,t.^2,'g') %reprezentam grafic pasul t
plot(t,t.^3,'k') %reprezentam grafic pasul t
hold off

sufigura 1,1
punctul
punctul
punctul
punctul

B1
B2
B3
B4

cu
cu
cu
cu

albastru
rosu
verde
negru

Considerente teoretice:curba bezier interactiva exte o curba bezier care poate avea
orice fel de poligon de control pentru ca nu are o anume matrice aferenta punctelor de
control matricea se introduce cu ajutorul comenzii ginput si serveste drept citirea
punctelor de control in continuare vom exemplifica spusele de mai sus
Date de intrare: punctele selctate cu mousul citite de comanda ginput
Date de iesire :punctele de control B0 B1 B2 B3 care rezulta din fomrulele lor aferente
Reprezentare grafica:sunt mai multe exemple diferite care au diferite puncte de control

12

ULBS Facultatea de Stiinte Specializarea


Informatica

OBSERVATIE:aceste program contine elemente comentate mai sus va rog consultati


programele de mai sus
Programul aferent : title('curba bezier');

b=ginput(4);%se colecteaza punctele de control ale poligonului


b=b';%se face inversa matricei punctelor de control
t=0:0.01:1;%parametrul
B0=(1-t).^3
B1=3*(1-t).^2.*t
B2=3*(1-t).*(t.^2)
B3=t.^3
%pol bernstein in camp de vect
B=[B0;B1;B2;B3]
f=b*B; %curba bezier
hold on
%repr
plot(b(1,:),b(2,:),'r-')
plot(f(1,:),f(2,:),'b')
hold off

de control

Considerente teoretice: CB precizie liniara este data de matricea abs si ord a pct de
control care se pot da printro relatie precum avem in programul nostru
Date de intrare:punctele de control

13

ULBS Facultatea de Stiinte Specializarea


Informatica
Date de iesire :matricea b care este de forma b=[0,2,4,6;0,1/i,1/i,0] acest lucru ne
spne ca ordonata este data liniar prin intructiunea for

Punctele de control care sunt formate prin forulele aferente gradului din pol lui berstein
Reprezentare grafica:

Programul aferent :
OBSERVATIE:aceste program contine elemente comentate mai sus va rog consultati
programele de mai sus
%computation
t=0:0.01:1;%parametrul
B0=(1-t).^3
B1=3*(1-t).^2.*t
B2=3*(1-t).*(t.^2)
B3=t.^3
%pol bernstein in camp de vect
B=[B0;B1;B2;B3]
for i=1:100%instructiunea for este cea care formeaza de 100 de ori matricea %b care
este dependenta de contorul i
b=[0,2,4,6
0,1/i,1/i,0],%matricea b dependenta de i care reprezinta abs si ord punctelor
de control
f=b*B; %curba bezier
hold on
%repr
title('precizie liniara');
plot(b(1,:),b(2,:),'--b')
plot(f(1,:),f(2,:),'r')
hold off
end

Considerente teoretice: Fiind dat o funcie f:[a,b]->R, problema de interpolare a funciei


f printr-un polinom este problema dterminrii polinomului (de cel mai mic grad posibil) care
s reproduc nite informaii cunoscute despre funcia f.

14

ULBS Facultatea de Stiinte Specializarea


Informatica
Date de intrare:sunt punctele de control ,matricea p , mat A si matricea b care este inv lui
a ori matricea p
Date de iesire : sunt punctele de din matricea x care traseaza graficul functiei interpolate
Reprezentare grafica:

Date de intrare::
OBSERVATIE:aceste program contine elemente comenteate mai sus consulati programele
de mai sus
p=[1 3 5 9;-3 6 8 3];
for k=1:4% in ciclul for se incrementeaza k care foloseste la afisarea punctelor p
plot(p(1,k),p(2,k),'gs'); hold on
end
A=(1/27)*[27 0 0 0; 8 12 6 1; 1 6 12 8; 0 0 0 27];%matricea A care foloseste la
calcularea punctelor de control
b = inv(A)*p';%b matricea punctelor de control
b=b';%se face inversa lui b
plot(b(1,:), b(2,:), 'bx-');
%computation
t=0:.001:1; %parametrul
B0=(1-t).^3;
B1=3.*(1-t).^2.*t;
B2=3.*(1-t).*t.^2;
B3=t.^3;

15

ULBS Facultatea de Stiinte Specializarea


Informatica
B=[B0;B1;B2;B3];
x=b*B; %curba bezier interpolatoare
%output
comet(x(1,:),x(2,:));

Curs5

16

ULBS Facultatea de Stiinte Specializarea


Informatica
Considerente teoretice: Algoritmul lui de Casteljau

Considerm o curb Bezier, dat n forma parametric prin:


n

f (t ) ( x(t ), y (t )) bi Bin (t ), t [0,1], bi ( xi , y i ), i 0,3


i 0

reprezentnd punctele de control i

n
(1 t ) n i t i
i

Bin (t )

reprezentnd polinoamele lui Bernstein de grad n. Curba Bezier este


controlat de punctele de control.
Ne intereseaz o metod geometric, care s permit obinerea unui punct de pe
curba Bezier, pentru o anumit valoare a parametrului t.

[0,1]
O metod numeric stabil de evaluare a curbelor Bezier pentru t
a fost dezvoltat
de Paul de Casteljau i poart numele algoritmul de Casteljau. Algoritmul calculeaz

[0,1]
punctul de pe curba Bezier pe un anume t
folosind o formul recursiv care lucreaz
pe mai multe nivele. Aceast structur pe nivele, obinut n urma aplicrii algoritmului, se
numete structur sistolic.

Date de intrare:punctele de control citite cu ajutorul instructiuni ginput


Date de iesire :punctele de control citite cu ajutorul instr. ginput si punctele care
formeaza structura sistolica a poligonului de control
Reprezentare grafica:
OBSERVATIE:se observa cum pentru acelasi program cu ajutorul instructiuni ginput se
obtin grafice diferite

17

ULBS Facultatea de Stiinte Specializarea


Informatica

Programul aferent :
OBSERVATIE :acest program contine elemente comentate ianinte va rog consulati
programele anterioanre pentru mai multe detalii
title('Algoritm Casteljau')
b=ginput(4);%folosim ginputpentru a citi punctele
b=b';%facem inv lui b ;
t=0:0.01:1;%parametrul
B0=(1-t).^3
B1=3*(1-t).^2.*t
B2=3*(1-t).*(t.^2)
B3=t.^3
%pol bernstein in camp de vect
B=[B0;B1;B2;B3]
f=b*B; %curba bezier
hold on
%repr
plot(b(1,:),b(2,:),'r-')
plot(f(1,:),f(2,:),'b')
b
t=1/2;
b1=zeros(2,3); b2=zeros(2,2); b3=zeros(2,1);
for i=1:3%in urmatoarele instructiuni for se creeeeza structura sistolica a
polignului de control

bi j
b1(:,i)=b(:,i)*(1-t)+b(:,i+1)*t;%se formeaza punctul
end
b1
for i=1:2

bi j
b2(:,i)=b1(:,i)*(1-t)+b1(:,i+1)*t; ;%se formeaza punctul
end
b2

bi j
b3(:,1)=b2(:,1)*(1-t)+b2(:,2)*t%se formeaza punctele din structura sistolica
plot(b1(1,:),b1(2,:),'g*')
plot(b1(1,:),b1(2,:),'g-')
plot(b2(1,:),b2(2,:),'k*')
plot(b2(1,:),b2(2,:),'k-')
plot(b3(1,:),b3(2,:),'m*')
hold off

18

ULBS Facultatea de Stiinte Specializarea


Informatica
Considerente teoretice:alg lui decastelju de divizare este creeat pentru a diviza la figurat

bi j
o structura sistolica de punctul
care se gaseste la sfarsitul primei CB si
inceputulceleilante CB un fel de interpolare
Date de intrare:punctele de control ale poligonui de control dupa care se creeaza
structura sistolica puncte care sunt citite cu ajutorul instructiunii ginput
Date de iesire :cele doua CB care reprezinta divizarea CB principala date ce punctele de
control CB devizate care sunt reprezentate de PCT din structura sistolica a poligonului de
control
Reprezentare grafica:
In cele ce urmeaza voi incerca sa arat compunerea CB principale din cele doua CB divizate

-partea de sus a CB
principale

-CB principal
impreuna cu
structura sistolica

-partea de jos a CB
principale

Programul aferent :

19

ULBS Facultatea de Stiinte Specializarea


Informatica
OBSERVATIE:acest program contine elemente comentate inainte va rog consultati
programele precedente pentru mai multe detalii
title('Algoritm Casteljau')
b=ginput(4);
b=b';
t=0:0.01:1;%parametrul
B0=(1-t).^3
B1=3*(1-t).^2.*t
B2=3*(1-t).*(t.^2)
B3=t.^3
%pol bernstein in camp de vect
B=[B0;B1;B2;B3]
f=b*B; %curba bezier
hold on
%repr
plot(b(1,:),b(2,:),'r-')
plot(f(1,:),f(2,:),'b')
b
t=1/2;
b1=zeros(2,3); b2=zeros(2,2); b3=zeros(2,1);
for i=1:3
b1(:,i)=b(:,i)*(1-t)+b(:,i+1)*t;
end
b1
for i=1:2
b2(:,i)=b1(:,i)*(1-t)+b1(:,i+1)*t;
end
b2
b3(:,1)=b2(:,1)*(1-t)+b2(:,2)*t
plot(b1(1,:),b1(2,:),'g*')
plot(b1(1,:),b1(2,:),'g-')
plot(b2(1,:),b2(2,:),'k*')
plot(b2(1,:),b2(2,:),'k-')
plot(b3(1,:),b3(2,:),'m*')

hold off
s=[b(:,1) b1(:,1) b2(:,1) b3(:,1)];%s reprezinta partea de sus a CB principale
d= [b(:,4) b1(:,3) b2(:,2) b3(:,1)]; )];%d reprezinta partea de jos a CB
principale

figure%creeam o figura
CurbaBezierf(s)%trasam
figure creeam o figura
CurbaBezierf(d)%trasam

pentru
grafic
pentru
grafic

a trasa grafic CB rezultata in urma divizarii


CB rezultata din divizarea CB principale
a trasa grafic CB rezultata in urma divizarii
CB rezultata din divizarea CB principale

20

ULBS Facultatea de Stiinte Specializarea


Informatica

Curs6&7
Considerente teoretice: Degree elevation ridicarea n grad
Orice polinom de grad n scris n form monomial, poate fi privit ca un polinom de gard mai
mare, cu primii coeficieni 0.
De ex. p3(x)=x3+2x2-5x+2, poate fi privit sub forma polinomului de grad 5, p 5(x)=0x5+0x4+
x3+2x2-5x+2. n cazul unui polinom scris folosind baza Bernstein, acest lucru nu mai este
valabil. Astfel, de exemplu, parabola scris parametric n baza Bezier sub forma:

x (t ) 0 2
0
1
0
0
1
B0 (t ) B12 (t ) B22 (t ), b0 , b1 , b2 , ( x(t ) B22 (t ), y (t ) B02 (t ))
y (t ) 1
0
0
1
0
0

f (t )

0 3
0 3
0.33 3
1
B0 (t )
B1 (t )
B2 (t ) B33 (t )
1
0.33
0
0

f (t )
se scrie sub form cubic

Curba obinut este aceeai, dar parametrizarea este diferit.

b0

b0

b1
b1

b2
Poligonul de

b2

b3

Poligonul de

Cele dou curbe sunt identice, dar poligonul de control are mai multe puncte n al doilea
caz.
Algoritmul de determinare a curbei Bezier avnd gradul cu unu mai mare dect al unei
curbe Bezier date se numete algoritmul de ridicare n grad (degree elevation).

21

ULBS Facultatea de Stiinte Specializarea


Informatica
Ridicarea n grad a unei curbe de grad n la o curb de grad n+1 se face conform
urmtorului algoritm:

Date de intrare:matricea b care are 2 linii si un nr de coloane egal cu nr. pc. control
Date de iesire : sunt matricile primei CB de grad n si celei de a doua CB de grad n+1
Reprezentare grafica:pentru reprezentarea grafica a acestor doua CB este nevoie de o
functie curba_bezierf.m care trebuie adaptata sa afiseze in doua cazuri odata pentru n si
odata pentru n+1 pc de control astfel va vi prezenta in continuare cele doua CB

Programul aferent :

OBSERVATIE acest program foloseste elemente comentte in programele precedente


%b are 2 linii si un nr de coloane egal cu nr. pc. control
b=[0 3 6 9;0 6 6 0];
nrpc=max(size(b))% aflam nr de coloane a matricei b
n=nrpc-1
b1=zeros(2,nrpc+1) %initializam matricea b1 cu 0
b1(:,1)=b(:,1)
b1(:,nrpc+1)=b(:,nrpc)
for i=2:nrpc
b1(:,i)=(i-1)/(n+1)*b(:,i-1)+(1-i/(n+1))*b(:,i)%completam B1 cu punctele din b
pentru a mari gradul funtiei
end
hold on
subplot(2,1,1)
%computation
t=0:0.01:1;%parametrul
B0=(1-t).^3
B1=3*(1-t).^2.*t
B2=3*(1-t).*(t.^2)
B3=t.^3
%pol bernstein in camp de vect
B=[B0;B1;B2;B3]
f=b*B; %curba bezier
hold on
%repr
plot(b(1,:),b(2,:),'r-')
plot(f(1,:),f(2,:),'b')
hold off

22

ULBS Facultatea de Stiinte Specializarea


Informatica
subplot(2,1,2)
t=0:0.01:1;%parametrul
B0=(1-t).^4
B1=4*(1-t).^3.*t
B2=6*(1-t).^2.*(t.^2)
B3=4*(1-t).^1.*(t.^3)
B4=t.^4;
%pol bernstein in camp de vect
B=[B0;B1;B2;B3;B4]
f1=b1*B; %curba bezier
hold on
%repr
plot(b1(1,:),b1(2,:),'r-')
plot(f1(1,:),f1(2,:),'b')
hold off
hold off

Considerente teoretice: Interpolarea Hermite presupune specificarea n fiecare punct a


cte dou condiii: valoarea funciei i valoarea derivatei.
O curb cubic Hermite are forma:

f (t ) p 0 H 03 (t ) m0 H 13 (t ) m1 H 23 (t ) p1 H 33 (t ); t [0,1]
,
p0 = punctul de nceput
m0 = tangenta n punctul de nceput
p1 = punctul de sosire (sfrit)
m1 = tangenta n punctul de sosire

Date de intrare: vectorul t care serveste drept coeficienti pentru punctele de control
Date de iesire : p0 punctul de nceput ,m0 tangenta n punctul de nceput, p 1 punctul de
sosire (sfrit), m1 tangenta n punctul de sosire,precum si punctele de control aferente
poligonului de cotrol

Reprezentare grafica:

23

ULBS Facultatea de Stiinte Specializarea


Informatica

Programul aferent :
OBSERVATIE:acest program foloseste elemente comentate in programele anterioare
t=0:0.01:1;%parametrul
B0=(1-t).^3
B1=3*(1-t).^2.*t
B2=3*(1-t).*(t.^2)
B3=t.^3
H0=B0+B1%creeam punctul de control hermite cu conditia lui
H1=B1/3%creeam punctul de control hermite cu conditia
H2=-B2/3%creeam punctul de control hermite cu conditia
H3=B2+B3%creeam punctul de control hermite cu conditia
%pol Hermite in camp de vect
H=[H0;H1;H2;H3]%reprezinta matricea punctelor de control de tipul hermite
p0=[0;0];
m0=[1;1];
m1=[8;0.2]
p1=[5;0];
h1=[p0 m0]
h2=[m1 p1]
h=[h1 h2]
f=h*H; %curba bezier
hold on
%repr
title('curba bezier');
plot(h1(1,:),h1(2,:),'r-')
plot(h2(1,:),h2(2,:),'r-')
plot(f(1,:),f(2,:),'b')
hold off

24

ULBS Facultatea de Stiinte Specializarea


Informatica

Curs8&9
Considerente teoretice: Suprafeele Bezier se scriu parametric n una din formele:
n

s (u , v) bij B mj (u ) Bin (v );
i 0 j 0
n

s (u , v) bi (u ) Bin (v );
i 0
m

s (u , v) bj (v) B mj (u )
j 0

Forma suprafeei se obine prin metoda tensorial, deplasnd 2 curbe Bezier, numite curbe
de control, una de-a lungul celeilalte. Forma suprafeei se obine nlocuind punctele de
control din ecuaia uneia dintre curbele de control cu ecuaia celeilalte curbe de control.

Date de intrare: punctele de control le vom reine n matricea b. Pe prima linie a matricei
b vom reine abscisele punctelor de control, iar pe linia a doua vom reine ordonatele.
Date de iesire: matricile bx by bz care vor servi punctele de control CB aferente
Reprezentare grafica:

25

ULBS Facultatea de Stiinte Specializarea


Informatica

Programul aferent:
OBSERVATIE:acest program contine elemente comentate in programele anterioare
%coordonatele x,y si z ale punctelor de control
bx = ones(4,1) * [1 2/3 2/3 0];%initializam matricea bx cu zero
by = ones(4,1) * [0 1/3 4 2]; %initializam matricea by cu zero
bz = ones(4,1) * [0 1 2 3]; %initializam matricea bz cu zero
bz = bz';translatam matricea bz
t = 0:0.05:1; %parametrul
%Polinoamele lui Bernstein de grad 3
B0 = (1-t).^3;
B1 = 3*(1-t).^2 .* t;
B2 = 3*(1-t) .* (t.^2);
B3 = t.^3;
B = [B0;B1;B2;B3];
u=0:0.05:1;% parametru
% Polinoamele lui Bernstein de grad 3
% in functie de u.
B0u = (1-u).^3;
B1u = 3*(1-u).^2 .* u;
B2u = 3*(1-u) .* (u.^2);
B3u = u.^3;
Bu = [B0u;B1u;B2u;B3u];
% coordonatele retelei bezier
% reprezentate cu ajutorul

26

ULBS Facultatea de Stiinte Specializarea


Informatica
%
x
y
z

polinoamelor lui Bernstein


= B' * bx * Bu;
= B' * by * Bu;
= B' * bz * Bu;

% la inaltimile h = 1,2,3,4;
% pastrate in matricea bz
hold on;
plot3(bx(1,:),by(1,:),bz(1,:),'-r*');%afisam pc de control de pe coloana 1
plot3(bx(2,:),by(2,:),bz(2,:),'-r*'); %afisam pc de control de pe coloana 2
plot3(bx(3,:),by(3,:),bz(3,:),'-r*'); %afisam pc de control de pe coloana 3
plot3(bx(4,:),by(4,:),bz(4,:),'-r*'); %afisam pc de control de pe coloana 4

% La executia fisierului rotiti in 3D figura


% pentru a vedea suprafata in 3D.
surf(x,y,z);%afisam suprafata cu ajutorul surf
alpha 0.9;%selectam transparenta si saturatia culorilor

Considerente teoretice:
pornind de la o curbp Bezier situat n
planul XoY , pe care o deplasm paralel cu
ea nsi de-a lungul axei Oz pn la o
nlime dorit de noi Suprafaa obinut
este o suprafa cilindric. Avem nevoie
de 4 puncte Bezier de control ale curbei

din planul xOy. Aceste puncte vor avea


valoarea coodonatei z = 0; restul
punctelor din reeaua de punct de control,
valoarea abscisei i ordonatei se menine,
iar valoarea lui z se modific.

27

Date de intrare:matricea b care este cea care ne da punctele de control ale CB


care va fi trasa paralele cu ea
Date de iesire:dreptele paralele care provin din matricea b ele fiind una si
aceasi CB dar duse paralel

Reprezentare grafica:
Programul aferent:
OBSETVATIE :programul nostru este compus din mai multe functii care impreuna
formeaza programul care creeaza o suprafata bezier cilindrica
OBSERVATIE:acest program contine elemente comentate in programele
anterioare
function surfcil(b)%este functia care deseneaza si in care se introduc
datele de intrare
b=[1 2 1 1;1 2 2 1]%matricea pct de control
[bx,by,bz]= bez3cilindru(b);%apelam functia bez3cilindru(b) care
initializeaza matricile bx by bz cu o si bz se transpune
[x,y,z]=bez3surf(bx,by,bz);%apelam functia bez3surf(bx,by,bz care este
cheia in trasarea C-lor.B paralele acesta funtie face ca matrcile bx by bz
sa contina punctele de control ale CB
shading interp;
colormap cool;%coloram suprafata cu schema de culori cool
mesh(x,y,z);%folosim mesh pentru a trasa grafic suprafata
alpha 0.9
% input
% bx,by,bz coord pc bezier dim=4*4
function [x,y,z]=bez3surf(bx,by,bz)% functia bez3surf(bx,by,bz este cheia
in trasarea C-lor.B paralele acesta funtie face ca matrcile bx by bz sa
contina punctele de control ale CB

%parametrii
u=0:0.01:1;
v=0:0.01:1;
B0u=(1-u).^3;
B1u=3.*(1-u).^2.*u;

B2u=3.*(1-u).*(u.^2);
B3u=u.^3;
B0v=(1-v).^3;
B1v=3.*(1-v).^2.*v;
B2v=3.*(1-v).*(v.^2);
B3v=v.^3;
Bu=[B0u;B1u;B2u;B3u];
Bv=[B0v;B1v;B2v;B3v];

x=Bv'*bx*Bu;
y=Bv'*by*Bu;
z=Bv'*bz*Bu;
function [bx,by,bz]=bez3cilindru(b)%aceasta fuunctie este cea care
initializeaza matricile bx by bz cu o si bz se transpune
%
%IN .... bc= dimensiune 2x4 punctele bezier ale curbei din planul xy
%OUT ... b=3x4x4 =[bx,by,bz] punctele bezier ale suprafetei cilindrice
obtine
% prin translatie in directia axei z pina z=3
bx=ones(4,1)*b(1,:);
%bx=[bc(1,:);bc(1,:);bc(1,:);bc(1,:)] ;
by=ones(4,1)*b(2,:);
%by=[bc(2,:);bc(2,:);bc(2,:);bc(2,:)] ;
bz=ones(4,1)*[0 1 2 3];
bz=bz';

Considerente teoretice:vom incerca sa trasam o suprafata cilindrica


dupa ecuatia ax+by+cz=0 si vom folosi aceasta ecuatie in sistemul x,y,z
tridimensional ca sa ducem paralel cu ea insasi o CB in directia data de ecuata
ax+by+cz=0
Date de intrare: punctele de control ale matricei b si coeficientii ecuatiei
ax+by+cz=0
Date de iesire:matricea cu punctele de control calculate dupa folmulele lor si
coordonatele x y z
Reprezentare grafica:
voi prezenta mai multe suprafete in functie de matricea b
bc = [9 2 1/2 9;2 3 8 2];

bc = [10/11 7 1/2 9;5 3 14 11/10];

Programul aferent:
bc = [1 4 7 9;1 9 8 2];%
bx = ones(4,1) * bc(1,:);
by = ones(4,1) * bc(2,:);
% Ax + By + Cz = 0
% ecuatia deplasamentului
A=20; B=-20; C=1; % coeficientii
% parametrii
u = 0:0.05:1;%parametrul care se foloseste pentru Bu
v = 0:0.05:1;%parametrul care se foloseste pentru BV
% Pol.Bernstein cu u
B0u = (1-u).^3;
B1u = 3.*(1-u).^2.*u;
B2u = 3.*(1-u).*(u.^2);
B3u = u.^3;
Bu = [B0u;B1u;B2u;B3u];
% Pol.Bernstein cu v
B0v = (1-v).^3;
B1v = 3.*(1-v).^2.*v;
B2v = 3.*(1-v).*(v.^2);
B3v = v.^3;
Bv = [B0v;B1v;B2v;B3v];
% coordonatele suprafetei
Dx = 1; % deplasament pe axa Ox

Dy = 0.2; % deplasament pe axa Oy


x= Bv' * bx * Bu;
y= Bv' * by * Bu;
for i=0:(size(x,1)-1)
x(i+1,:) = x(i+1,:) + Dx * i;
y(i+1,:) = y(i+1,:) + Dy * i;
end
z = (- A*x - B*y) / C;
z = z';
hold on;
plot3(x(1,:),y(1,:),z(1,:),'*');
surf(x,y,z);
hold off;

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