Sunteți pe pagina 1din 30

Geometrie

Computationala
(Curs)
Sandica Robert

1
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 numărul 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 :

x = -2 : 0.01 : 10; %punctul x

2
y = 3*x + 4; %punctul y

plot (x, y)r%reprezentarea punctelor intro curba explicita

3
Curs3

Considerente teoretice: Pentru CAGD este foarte importantă reprezentarea parametrică a curbelor şi
suprafeţelor. 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

Date de intrare:vectorul t punctele x,y date de funtiile aferente

Date de iesire :punctele de aflate prin functiile aferente

4
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

5
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

6
Curs4

Considerente teoretice: Polinoamele lui Bernstein

n n
Polinoamele definite prin relaţiile: Bi (t )   (1  t ) n i t i ; t  [0,1]; i  0,1,..., n (cu    c ni - coeficienţi
n

i i
n n!
binomiali;    ), poartă denumirea de polinoamele lui Bernstein de grad n.
 i  i!(n  i )!

Polinoamele lui Bernstein formează o bază pentru spaţiul polinoamelor de grad n. Deci, orice polinom de
grad n se poate scrie ca o combinaţie liniară de polinoame ale lui Bernstein, adică există constantele a0, a1, ...,an,
nu toate nule, astfel încât:

Date de intrare: programul diferite valori a punctelor de control obținet diferite tipuri de curbe:
1) Concavă: b=[0 3 6 9;0 6 6 0]
2) Convexă: b=[0 3 6 9;6 0 0 6]
3) Cu punct de inflexiune: b=[0 3 6 9;1 9 0 6]
4) Cu punct unghiular: b=[0 15 2 12;1 8 7 0]
5) Cu buclă: b=[0 15 2 8;1 8 7 0]
6) Închisă: b=[0 3 6 0;0 6 3 0]
7) Dreaptă: b=[0 1 2 3;0 2 4 6]

Date de iesire : datele de iesire sunt punctele de control calculate prin folmula
n
Bi (t )   (1  t ) ni t i ; t  [0,1]; i  0,1,..., n , În matricea f vom avea coordonatele punctelor de pe curba bezier de grad
n

i
3, cu ajutorul cărora vom reprezenta grafic curba utilizând funcția plot.

Reprezentare grafica:

1)

7
2)

3)

4)

5)

8
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;
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:

9
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:

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;

10
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:

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 sufigura 1,1
hold on
plot(t,B1,'b') %reprezentam grafic pasul t si punctul B1 cu albastru
plot(t,B2,'r') %reprezentam grafic pasul t si punctul B2 cu rosu
plot(t,B3,'g') %reprezentam grafic pasul t si punctul B3 cu verde
plot(t,B4,'k') %reprezentam grafic pasul t si punctul B4 cu negru

11
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

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

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 de control
b=b';%se face inversa matricei punctelor de control
t=0:0.01:1;%parametrul
B0=(1-t).^3

12
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
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

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

13
title('precizie liniara');
plot(b(1,:),b(2,:),'--b')
plot(f(1,:),f(2,:),'r')
hold off
end

Considerente teoretice: Fiind dată o funcţie f:[a,b]->R, problema de interpolare a funcţiei f printr-un polinom
este problema dterminării polinomului (de cel mai mic grad posibil) care să reproducă nişte informaţii cunoscute
despre funcţia f.

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

14
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;

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

15
Curs5

Considerente teoretice: Algoritmul lui de Casteljau

Considerăm 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 reprezentând punctele de control şi
i 0

n
Bin (t )   (1  t ) ni t i reprezentând polinoamele lui Bernstein de grad n. Curba Bezier este controlată de
i
punctele de control.

Ne interesează o metodă geometrică, care să permită obţinerea unui punct de pe curba Bezier, pentru o
anumită valoare a parametrului t.

O metodă numerică stabilă de evaluare a curbelor Bezier pentru t  [0,1] a fost dezvoltată de Paul de Casteljau şi
poartă numele algoritmul de Casteljau. Algoritmul calculează punctul de pe curba Bezier pe un anume t  [0,1]
folosind o formulă recursivă care lucrează pe mai multe nivele. Această structură pe nivele, obţinută în urma
aplicării algoritmului, se numeşte 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

16
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 „ginput”pentru 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
j
b1(:,i)=b(:,i)*(1-t)+b(:,i+1)*t;%se formeaza punctul bi
end
b1
for i=1:2
j
b2(:,i)=b1(:,i)*(1-t)+b1(:,i+1)*t; ;%se formeaza punctul bi
end
b2
j
b3(:,1)=b2(:,1)*(1-t)+b2(:,2)*t%se formeaza punctele din structura sistolica bi

plot(b1(1,:),b1(2,:),'g*')
plot(b1(1,:),b1(2,:),'g-')
plot(b2(1,:),b2(2,:),'k*')

17
plot(b2(1,:),b2(2,:),'k-')
plot(b3(1,:),b3(2,:),'m*')
hold off
Considerente teoretice:alg lui decastelju de divizare este creeat pentru a diviza la figurat o structura sistolica de
punctul bi j 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 :

OBSERVATIE:acest program contine elemente comentate inainte va rog consultati programele precedente pentru
mai multe detalii

18
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 pentru a trasa grafic CB rezultata in urma „divizarii”


CurbaBezierf(s)%trasam grafic CB rezultata din divizarea CB principale
figure creeam o figura pentru a trasa grafic CB rezultata in urma „divizarii”
CurbaBezierf(d)%trasam grafic CB rezultata din divizarea CB principale

19
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
coeficienţi 0.

De ex. p3(x)=x3+2x2-5x+2, poate fi privit sub forma polinomului de grad 5, p5(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
f (t )       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
 0  0  3  0.33  3 1
se scrie sub formă cubică f (t )    B03 (t )    B1 (t )    B2 (t )    B33 (t ) .
1  0.33   0   0

Curba obţinută este aceeaşi, dar parametrizarea este diferită.

b0
b0

b1

b1
b2
b2 b3 Poligonul de control
Poligonul de control

Cele două curbe sunt identice, dar poligonul de control are mai multe puncte în al doilea caz.

Algoritmul de determinare a curbei Bezier având gradul cu unu mai mare decât al unei curbe Bezier date se
numeşte algoritmul de ridicare în grad (degree elevation).

Ridicarea în grad a unei curbe de grad n la o curbă de grad n+1 se face conform următorului 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

20
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
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-')

21
plot(f1(1,:),f1(2,:),'b')
hold off
hold off

Considerente teoretice: Interpolarea Hermite presupune specificarea în fiecare punct a câte două condiţii:
valoarea funcţiei ş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 (sfârşit)

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, p1 punctul de sosire (sfârşit), m1
tangenta în punctul de sosire,precum si punctele de control aferente poligonului de cotrol

Reprezentare grafica:

Programul aferent :

OBSERVATIE:acest program foloseste elemente comentate in programele anterioare

22
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

23
Curs8&9

Considerente teoretice: Suprafeţele Bezier se scriu parametric în una din formele:

n m
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 suprafeţei se obţine prin metoda tensorială, deplasând 2 curbe Bezier, numite curbe de control, una de-a
lungul celeilalte. Forma suprafeţei se obţine înlocuind punctele de control din ecuaţia uneia dintre curbele de
control cu ecuaţia celeilalte curbe de control.

Date de intrare: punctele de control le vom reține în matricea b. Pe prima linie a matricei b vom reține abscisele
punctelor de control, iar pe linia a doua vom reține ordonatele.

Date de iesire: matricile bx by bz care vor servi punctele de control CB aferente

Reprezentare grafica:

24
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
% polinoamelor lui Bernstein

25
x = B' * bx * Bu;
y = B' * by * Bu;
z = 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 deplasăm paralel cu ea însăşi de-a lungul
axei Oz până la o înălţime dorită de noi Suprafaţa
obţinută 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 reţeaua de punct de control,
valoarea abscisei şi ordonatei se menţine, iar
valoarea lui z se modifică.

26
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;

27
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];

28
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

29
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;

30

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