Sunteți pe pagina 1din 8

LABORATOR 2 Geometrie computaţională

LABORATOR 2

Reprezentarea grafică a suprafeţelor


1. Funcții Maple pentru trasarea unor suprafețe

In Maple pot fi reprezentate grafic porțiuni de suprafețe definite, date prin reprezentare explicit,
implicita sau parametrică.

a) Suprafeţe definite prin reprezentare explicită

(x, y, z ), z = F ( x, y), F : [a, b]  [c, d ] → R


Pentru reprezentarea grafică se poate folosi o comandă de forma

>plot3d( F(x,y), x=a..b,y=c..d, options);

- funcţia F poate fi definită în linia de comandă sau anterior


- x,y sunt variabile independente
- options reprezinta o lista de opţiuni (eventual vidă) pentru comanda plot
Exemple. Pentru reprezentarea paraboloidului hiperbolic z = x 2 − y 2 , x  [−2,2], y  [−2,2] putem folosi
una dintre secvenţele de comenzi :

>plot3d(x^2-y^2,x=-2..2, y=-2..2) ;
sau (paraboloidul eliptic)
> F :=x^2+y^2 ;
plot3d(F(x,y),x=-2..2,y=-2..2);

Pentru a reprezenta două sau mai multe suprafeţe definite explict în aceeaşi fereastră se poate proceda în felul
următor :

>plot( {f(x,y),g(x,y)}, x=a..b,y=c..d,options);


sau
>p1:=plot( f(x,y), x=a..b,y=c..d,options);
p2:=plot( g(x,y), x=a..b,y=c..d,options);
display({p1,p2});

Comanda următoare desenează cei doi paraboloizi în aceeşi fereastră:

> plot3d({x^2+y^2, x^2-y^2},x=-2..2, y=-2..2) ;

b) Suprafeţe definite prin reprezentare implicită

(x, y, z ), F ( x, y, z ) = 0, F : [a, b]  [c, d ]  [e, f ] → R


Pentru reprezentarea grafică se poate folosi o comandă de forma

>implicitplot3d( F,x=a. .b,y=c..d, z=e..f, options);


>implicitplot3d( ecuatie, x=a. .b, y=c..d, z=e..f, options);

1
LABORATOR 2 Geometrie computaţională

- functia F şi ecuaţia pot fi definite în linia de comandă sau anterior


- x,y,z sunt este variabile
- options reprezintă o listă de opţiuni (eventual vidă) pentru comandă plot
Comanda implicitplot3d trebuie să fie precedată de o comandă with(plots) ;

Exemple (din Maple) .


> with(plots):
implicitplot3d( x^3 + y^3 + z^3 + 1 = (x + y + z + 1)^3,x=-2..2,y=-2..2,
z=-2..2,grid=[13,13,13]);

> implicitplot3d(r = (1.3)^x * sin(y),x=-1..2*Pi,y=0..Pi,r=0.1..5,


coords=spherical);

> p:= proc(x,y,z) if x^2 < y then x^2 + y^2 else x - y end if end proc:
implicitplot3d(p,-2..2,-1..3,0..3);

> implicitplot3d(r^2+z^2 = 9, r=0..3,theta=-Pi..Pi,z=-3..3,


coords=cylindrical);
> implicitplot3d({x^2 - y^2 + z^2 = 1,y = x^2+z^2},x=-2*Pi..2*Pi,y=-Pi..Pi,
z=-2..2,grid=[20,20,20]);

> implicitplot3d( (x-1)^2 + (y+1)^2 + z^2 = 4,x=-1..3,y=-3..1,z=-2..2,


color=blue);

c) Suprafeţe definite prin reprezentare parametrică

Suprafaţa parametrizată r : [a, b]  [c, d ] → R 2 , r (u, v) = (x(u, v), y (u, v), z (u, v) ) ,
Poate fi reprezentata grafic în Maple cu ajutorul comenzii

>plot3d( [ x(u,v) , y(u,v),z(u,v) ] , u= a .. b, v=c..d, options );

- funcţiile x,y,z pot fi definite în linia de comandă sau anterior


- u,v sunt variabile independente
- options reprezintă o listă de opţiuni (eventual vidă) pentru comanda plot
Exemple. Pentru reprezentarea paraboloizilor definiţi în exemplul anterior se pot folosi comenzile :

> plot3d( [u, v,u^2-v^2], u=-2..2,v=-2..2 );


sau
> x:= u;
y:= v;
z := u^2-v^2;
plot3d([x(u,v), y(u,v),z(u,v)], u=-2..2,v=-2..2);
> plot3d( [u, v,u^2+v^2], u=-2..2,v=-2..2 );

Pentru a reprezenta cele două suprafete definite parametric în aceeaşi fereastră se poate proceda în felul
următor :
> plot3d( {[u, v,u^2-v^2],[u, v,u^2+v^2]}, u=-2..2,v=-2..2 );
Exercitii.
1) Să se reprezinte grafic cuadricele :
x2 y2 z2
a) elipsoidul + + =1 ;
a2 b2 c2

2
LABORATOR 2 Geometrie computaţională

x2 y2 z2
b) hiperboloidul cu o pânză + − =1 ;
a2 b2 c2
x2 y2 z2
c) hiperboloidul cu două pânze 2 − 2 − 2 = 1 ;
a b c
2 2 2
conul 2 + 2 − 2 = 0 ; (au cos v, bu sin v, cu ), u  [0,1], v  [0,2 ]
x y z
d)
a b c
2
y2
= 1 ; (a cos v, b sin v, u ), u  [0,1], v  [0,2 ]
x
e) cilindrul eliptic 2 +
a b2
x2 y2
f) cilindrul hiperbolic 2 − 2 = 1 ; (a cosh v, b sinh v, u ), u  [0,1], v  [−1,1]
a b
( )
2
x
g) cilindrul parabolic 2 − z = 0 ; au, v, u 2 , u, v  [−1,1]
a
2) Să se reprezinte grafic suprafeţele următoare :
  
a) Sfera : (a cos u cos v, a cos u sin v, a sin u ), u  − , , v  [0,2 ]
 2 2
b) Torul : ((a + b cos u ) cos v, (a + b cos u ) sin v, b sin u ), u  0,2 , v  [0,2 ], a  b  0
   u   
c) Pseudosfera :  a sin u cos v, a sin sin v, a ln  tg  + cos u  , u   ,  , v  [0,2 ]
   2  2 
d) elicoidul drept : (u cos v, u sin v, v ), u  0,1, v  0,6 
e) banda lui Mobius :
  u  u u  1 1
 cos u 1 + v cos , 1 + v cos  sin u , v sin , u  0,2 , v  − , ,
  2  2 2  2 2
 u u 
f) catenoidul r (u , v) =  a cosh cos v, a cosh sin v, u  , u  [−b, b], v  [0,2 ]
 a a 
g) scoica r (z, ) = (1.3) sin  , (z,  )  − 1,2 )  0,  )
z

h) sticla lui Klein


Privita ca obiect obţinut prin alipirea a doua benzi Mobius, este definita parametric prin:
   
r (u , v ) =   a + cos sin v − b sin sin 2v  cos u ,  a + cos sin v − b sin sin 2v sin u , sin sin v + b cos sin 2v  
u u u u u u
 2 2   2 2 2 2 
(u, v )  0,2 )  0,2 )
Reprezentarea clasică este data de parametrizarea
6 cos u (1 + sin u ) + r cos u cos v,0  u  
x(u , v ) = 
6 cos u (1 + sin u ) + r cos(v +  ),   u  2
16 sin u + r sin u cos v,0  u  
y (u , v ) = 
16 sin u ,   u  2
z (u, v ) = r sin v unde r = a − 2 cos u, (u, v )  0,2 )  0,2 )

3
LABORATOR 2 Geometrie computaţională

2. Reprezentarea grafică a cuadricelor


2.1. Reprezentarea grafică a cudricelor date prin ecuaţia implicită f (x, y, z ) = 0 :
> f:= expresie;
implicitplot3d(f,x=x1..x2,y=y1..y2,z=z1..z2,plot_options);
Exemplu.
> with(plots):
f:=x^2+y^2+z^2+2*x*y-2*x*z-y*z+4*x+3*y-5*z+4;
implicitplot3d(f,x=-7..7,y=-7..7,z=-7..7,numpoints=2000);

2.2. Reprezentarea grafică a cudricelor date prin reprezentare parametrică


r (u, v ) = (x(u, v), y (u, v), z (u, v ), u  [u1, u 2], v  [v1, v 2] .
> x:=(u,v)->expresie_x;
y:=(u,v)->expresie_y;
z:=(u,v)->expresie_z;
plot3d([x(u,v),y(u,v),z(u,v)],u=-1..u2,v=v1..v2, plot_options);

Exemplul 1. Reprezentarea grafica a elipsoidului de semiaxe a, b, c


> with(plots):
a:=1;b:=2;c:=1;
x:=(u,v)->a*cos(u)*cos(v);
y:=(u,v)->b*cos(u)*sin(v);
z:=(u,v)->c*sin(u);
plot3d([x(u,v),y(u,v),z(u,v)],u=-
Pi/2..Pi/2,v=0..2*Pi,numpoints=200,labels =[x,y,z],
scaling=constrained,axes=normal);

Exemplul 2. Reprezentarea grafica a conului de semiaxe a, b, c


>a:=1;b:=2;c:=1;
x:=(u,v)->a*u*cos(v);
y:=(u,v)->b*u*sin(v);
z:=(u,v)->c*u;
plot3d([x(u,v),y(u,v),z(u,v)],u=-1..1,v=0..2*Pi,numpoints=200,labels
=[x,y,z], scaling=constrained,axes=normal);
Exemplul 3. Reprezentarea grafica a hiperboloidului cu o pânză de semiaxe a, b, c
>a:=1;b:=2;c:=1;
x:=(u,v)->a* (exp(u)+exp(-u))*cos(v):
y:=(u,v)->b*(exp(u)+exp(-u))* sin(v):
z:=(u,v)->c* exp(u)-exp(-u):
plot3d([x(u,v),y(u,v),z(u,v)],u=-2..2,v=0..2*Pi,numpoints=200,labels
=[x,y,z], scaling=constrained,axes=normal);

Exemplul 4. Reprezentarea grafica a hiperboloidului cu două pânze de semiaxe a, b, c


>a:=1;b:=2;c:=1;
x:=(u,v)->a* (exp(u)-exp(-u))*cos(v):
y:=(u,v)->b*(exp(u)-exp(-u))* sin(v):

4
LABORATOR 2 Geometrie computaţională

z:=(u,v)->c* exp(u)+exp(-u):
p1:=plot3d([x(u,v),y(u,v),z(u,v)],u=-2..2,v=0..2*Pi,numpoints=200,
labels =[x,y,z], scaling=constrained,axes=normal):
p2:=plot3d([x(u,v),y(u,v),-z(u,v)],u=-2..2,v=0..2*Pi,numpoints=200,
labels =[x,y,z], scaling=constrained,axes=normal):
display(p1,p2);
Exemplul 5. Reprezentarea grafica a paraboloidului eliptic de semiaxe a, b
>a:=1;b:=2;
x:=(u,v)->a* u*cos(v):
y:=(u,v)->b* u* sin(v):
z:=(u,v)-> u^2:
plot3d([x(u,v),y(u,v),z(u,v)],u=0..2,v=0..2*Pi,numpoints=200,
labels =[x,y,z], scaling=constrained,axes=normal);
Exemplul 6. Reprezentarea grafica a paraboloidului hiperbolic de semiaxe a, b
>a:=1;b:=2;
x:=(u,v)->a* u:
y:=(u,v)->b* v:
z:=(u,v)-> u^2-v^2:
plot3d([x(u,v),y(u,v),z(u,v)],u=-2..2,v=-2..2,numpoints=200,
labels =[x,y,z], scaling=constrained,axes=normal);

3. Studierea unei cuadrice cu Maple


Necesită utilizarea bibliotecii linalg care contine funcţii şi proceduri pentru determinarea
polinomului caracteristic, a vectorilor şi valorilor proprii asociate. Aceasta trebuie inserată prin
comanda
>with(linalg);
[ BlockDiagonal, GramSchmidt, JordanBlock, LUdecomp, QRdecomp, Wronskian, addcol,
addrow, adj, adjoint, angle, augment, backsub, band, basis, bezout, blockmatrix,
charmat, charpoly, cholesky, col, coldim, colspace, colspan, companion, concat, cond,
copyinto, crossprod, curl, definite, delcols, delrows, det, diag, diverge, dotprod,
eigenvals, eigenvalues, eigenvectors, eigenvects, entermatrix, equal, exponential,
extend, ffgausselim, fibonacci, forwardsub, frobenius, gausselim, gaussjord, geneqns,
genmatrix, grad, hadamard, hermite, hessian, hilbert, htranspose, ihermite, indexfunc,
innerprod, intbasis, inverse, ismith, issimilar, iszero, jacobian, jordan, kernel,
laplacian, leastsqrs, linsolve, matadd, matrix, minor, minpoly, mulcol, mulrow,
multiply, norm, normalize, nullspace, orthog, permanent, pivot, potential, randmatrix,
randvector, rank, ratform, row, rowdim, rowspace, rowspan, rref, scalarmul,
singularvals, smith, stackmatrix, submatrix, subvector, sumbasis, swapcol, swaprow,
sylvester, toeplitz, trace, transpose, vandermonde, vecpotent, vectdim, vector,
wronskian]

Se consideră cuadrica  dată prin ecuaţia implicită f (x, y, z ) = 0 .

5
LABORATOR 2 Geometrie computaţională

3.1. Determinarea expresiei matriceale a ecuaţiei cuadricei


- Pentru a determina matricea A asociată cuadricei  se folosesc următoarele instrucţiuni Maple :
>A:=matrix(3,3):
A[1,1]:=diff(diff(f,x),x)/2:
A[1,2]:=diff(diff(f,x),y)/2:
A[1,3]:=diff(diff(f,x),z)/2:
A[2,1]:=A[1,2]:
A[2,2]:=diff(diff(f,y),y)/2:
A[2,3]:=diff(diff(f,y),z)/2:
A[3,1]:=A[1,3]:
A[3,2]:=A[2,3]:
A[3,3]:=diff(diff(f,z),z)/2:
print("Matricea A");print(A);
- Pentru determinarea vectorului b asociat cuadricei  se folosesc următoarele comenzi Maple :
> B:=vector(3):
B[1]:=subs(x=0,y=0,z=0,diff(f,x)/2):
B[2]:=subs(x=0,y=0,z=0,diff(f,y)/2):
B[3]:=subs(x=0,y=0,z=0,diff(f,z)/2):
print("Vectorul b");print(B);
- Pentru determinarea termenului liber din ecuaţia lui  se folosesc următoarele instrucţiuni Maple :
> c:=subs(x=0,y=0,z=0,f):
print("c este");print(c);
Exemplu.
> f:=x^2+y^2+z^2+2*x*y-2*x*z-y*z+4*x+3*y-5*z+4;
A:=matrix(3,3):
A[1,1]:=diff(diff(f,x),x)/2:
A[1,2]:=diff(diff(f,x),y)/2:
A[1,3]:=diff(diff(f,x),z)/2:
A[2,1]:=A[1,2]:
A[2,2]:=diff(diff(f,y),y)/2:
A[2,3]:=diff(diff(f,y),z)/2:
A[3,1]:=A[1,3]:
A[3,2]:=A[2,3]:
A[3,3]:=diff(diff(f,z),z)/2:
print("Matricea A");print(A);
b:=vector(3):
b[1]:=subs(x=0,y=0,z=0,diff(f,x)/2):
b[2]:=subs(x=0,y=0,z=0,diff(f,y)/2):
b[3]:=subs(x=0,y=0,z=0,diff(f,z)/2):
print("Vectorul b");print(b);
c:=subs(x=0,y=0,z=0,f):
print("c este");print(c);

3.2. Determinarea centrelor de simetrie

6
LABORATOR 2 Geometrie computaţională

- Pentru a verifica dacă cuadrică este cu centru se calculează determinantul matricei A . Dacă
determinantul este diferit de zero atunci cuadrica este cu centru; în caz contrar este fără centru.
Calculul determinantului matricei A se face cu următoarele instrucţiuni Maple :
> delta:=det(A);
if delta<>0 then print("cuadrica cu centru")
else print("cuadrica fara centru")
end if;
-Centrele de simetrie sunt soluţiile sitemului liniar
Ax = −b
sau
f f f
= 0, = 0, = 0.
x y z
Determinarea centrelor se poate realiza cu urmatoarele comenzi Maple:
> print("Centre de simetrie");
linsolve(A,-b);
sau
> solve({diff(f,x),diff(f,y),diff(f,z)},{x,y,z});

3.3. Planul tangent într-un punct M (r0 ) la cuadrica are ecuaţia


r0 B ArB + b(rB + r0 B ) + c = 0 .
T

- Determinarea ecuaţiei planului tangent în punctul M (x0 , y 0 , z 0 ) se poate realiza cu urmatoarele

comenzi Maple (în exemplul de mai jos am considerat punctul M (−1,1,1)   ):


> r0:=vector(3,[-1,1,1]);
r:=vector(3,[x,y,z]);
plan_tangent:= evalm(r0&*A&*r+b&*(r+r0)+c);
print(plan_tangent =0);
1+x+y-z=0

- Pentru reprezentarea grafică a planului tangent în M (−1,1,1) la cuadrică se folosesc instrucţiunile :


> p1:=implicitplot3d(f,x=-7..7,y=-7..7,z=-7..7,numpoints=2000):
p2:=implicitplot3d(plan_tangent,x=-7..7,y=-7..7,z=-7..7):
display3d(p1,p2);

3.4. Pentru a determina intersecţia cuadricei  cu dreapta de direcţie a(1,2,0) ce trece prin punctul
M (1,2,3) se rezolvă ecuaţia

(a B
T
) ( )
Aa B t 2 + 2 r0 B A + b t + r0 B Ar0 B + 2br0 B + c = 0
T T

7
LABORATOR 2 Geometrie computaţională

Această ecuaţie se rezolvă în Maple astfel :


> print("Intersectia cu dreapta de directie (1,2,0) care trece prin
M(1,2,3)");
r0:=vector(3,[1,2,3]);
r:=vector(3,[x,y,z]);
a:=vector(3,[1,2,0]);
ecuatie:= evalm(a&*A&*a)*t^2+2* evalm((r0&*A+b)&*a)*t+c;
sol:=solve(ecuatie,t);
M1:=evalm(r0+sol[1]*a);
M2:=evalm(r0+sol[2]*a);

3.5. Ecuaţia planului diametral conjugat cu direcţia a în raport cu  , se determină astfel :


> print("Plan diametral conjugat cu directia a(2,4,6)");
a:=vector(3,[2,4,5]):
r:=vector(3,[x,y,z]):
diametru_1:= evalm((r&*A+b)&*a);
print(diametru_1=0);
diametru_2:= a[1]*diff(f,x)+a[2]*diff(f,y)+a[3]*diff(f,z);
print(diametru_2=0);