Apprendre Maple Quadriques
 
  Page d'accueilPage d'accueil   RechercherRechercher   Forum de discussionForum de discussion   ContactContact   SommaireSommaire 
  Cours MapleCours Maple   Travaux dirigésTravaux dirigés   Thèmes d'activitésThèmes d'activités   MapletsMaplets 
Ecran MapleEcran Maple  TéléchargementTéléchargement  BibliographieBibliographie  LiensLiens  

 

Page d'accueil   Maplets   << Page précédente   Page suivante >>


 

Quadriques
© Alain Le Stang - "Apprendre Maple" - 2004

Sélectionner Edit/Execute/Worksheet ou cliquer le bouton !!! pour exécuter ce Maplet.

 

> restart;
> with(Maplets[Elements]): with(Maplets[Tools]): with(plots):
 

Warning, the name changecoords has been redefined
 

--------------------------------------------------------------  ELLIPSOIDE  --------------------------------------------------------------

> ellipsoide := module()
export nom,type,equation,param,traceX,traceY,traceZ,info;

nom := proc() "Ellipsoide" end proc;
type := proc() ELLIPSOIDE end proc;
equation := proc() x^2/a^2 + y^2/b^2 +z^2/c^2=1 end proc;
param := proc(a,b,c)  [a*cos(u)*cos(v), b*sin(u)*cos(v), c*sin(v)], u=0..2*Pi, v=-Pi/2..Pi/2 end proc;
traceX := proc(a,b,c,k)  [k, cos(u)*sqrt(a^2-k^2)*b/a, sin(u)*sqrt(a^2-k^2)*c/a],u=0..2*Pi end proc;
traceY := proc(a,b,c,k)  [a*sqrt(b^2-k^2)*cos(u)/b, k, c*sqrt(b^2-k^2)*sin(u)/b], u=0..2*Pi end proc;
traceZ := proc(a,b,c,k)  [a*sqrt(c^2-k^2)*sin(u)/c, b*sqrt(c^2-k^2)*cos(u)/c, k], u=0..2*Pi end proc;
info := proc()
["Quadrique à centre unique.","Surface non réglée.",x=a*cos(phi)*cos(theta), y=b*cos(phi)*sin(theta),
z=c*sin(phi), theta = 0..2*Pi, phi = -Pi/2..Pi/2, x*x[0]/a^2+y*y[0]/b^2+z*z[0]/c^2 = 1," " ]
end proc;
end module;

ellipsoide := module () export nom, type, equation, param, traceX, traceY, traceZ, info; end module

> ellipsoide:-equation();

x^2/a^2+y^2/b^2+z^2/c^2 = 1

> X:=spacecurve(ellipsoide:-traceX(3,4,5,2), thickness=3, color=cyan):
> Y:=spacecurve(ellipsoide:-traceY(3,4,5,2), thickness=3, color=yellow):
> Z:=spacecurve(ellipsoide:-traceZ(3,4,5,2), thickness=3, color=red):
> Q:=plot3d(ellipsoide:-param(3,4,5)):
> display([Q,X,Y,Z],orientation=[45,60], scaling=constrained, axes = boxed);

 

[Plot]

---------------------------------------------  HYPERBOLOIDE A UNE NAPPE -----------------------------------------------------------

> hyp1 := module()
export nom,type,equation,param,traceX,traceY,traceZ,info;

nom := proc() "Hyperboloide a une nappe" end proc;
type := proc() HYP1 end proc;
equation := proc() x^2/a^2 + y^2/b^2 - z^2/c^2 = 1 end proc;

param := proc(a,b,c)    
   [a*cos(u)*cosh(v),b*sin(u)*cosh(v),c*sinh(v)],u=0..2*Pi,v=-arcsinh(10/c)..arcsinh(10/c)
end proc;

traceX := proc(a,b,c,k)  
if abs(k)<a then
[[k,cosh(u)*sqrt(a^2-k^2)*b/a,sinh(u)*sqrt(a^2-k^2)*c/a],u=-arcsinh(10*a/(c*sqrt(a^2-k^2)))..arcsinh(10*a/(c*sqrt(a^2-k^2))),
[k,-cosh(u)*sqrt(a^2-k^2)*b/a,sinh(u)*sqrt(a^2-k^2)*c/a],u=-arcsinh(10*a/(c*sqrt(a^2-k^2)))..arcsinh(10*a/(c*sqrt(a^2-k^2)))]
elif abs(k)>a then  
[[k,sinh(u)*sqrt(k^2-a^2)*b/a,cosh(u)*sqrt(k^2-a^2)*c/a],u=-arccosh(10*a/(c*sqrt(k^2-a^2)))..arccosh(10*a/(c*sqrt(k^2-a^2))),
[k,sinh(u)*sqrt(k^2-a^2)*b/a,-cosh(u)*sqrt(k^2-a^2)*c/a],u=-arccosh(10*a/(c*sqrt(k^2-a^2)))..arccosh(10*a/(c*sqrt(k^2-a^2)))]
else
[[k,b*u,c*u],u=-10/c..10/c,[k,-b*u,c*u],u=-10/c..10/c]
end if;
 end proc;

traceY := proc(a,b,c,k)  
if abs(k)<b then
[[cosh(u)*sqrt(b^2-k^2)*a/b,k,sinh(u)*sqrt(b^2-k^2)*c/b],u=-arcsinh(10*b/(c*sqrt(b^2-k^2)))..arcsinh(10*b/(c*sqrt(b^2-k^2))),
[-cosh(u)*sqrt(b^2-k^2)*a/b,k,sinh(u)*sqrt(b^2-k^2)*c/b],u=-arcsinh(10*b/(c*sqrt(b^2-k^2)))..arcsinh(10*b/(c*sqrt(b^2-k^2)))]
elif abs(k)>b then  
[[sinh(u)*sqrt(k^2-b^2)*a/b,k,cosh(u)*sqrt(k^2-b^2)*c/b],u=-arccosh(10*b/(c*sqrt(k^2-b^2)))..arccosh(10*b/(c*sqrt(k^2-b^2))),
[sinh(u)*sqrt(k^2-b^2)*a/b,k,-cosh(u)*sqrt(k^2-b^2)*c/b],u=-arccosh(10*b/(c*sqrt(k^2-b^2)))..arccosh(10*b/(c*sqrt(k^2-b^2)))]
else
[[a*u,k,c*u],u=-10/c..10/c,[-a*u,k,c*u],u=-10/c..10/c]
end if;
end proc;

traceZ := proc(a,b,c,k) [ a*sqrt(k^2+c^2)*sin(u)/c, b*sqrt(k^2+c^2)*cos(u)/c, k], u=0..2*Pi end proc;
info := proc()
["Quadrique à centre unique.","Surface réglée.",x=a*cosh(phi)*cos(theta), y=b*cosh(phi)*sin(theta), z=c*sinh(phi), theta = 0..2*Pi, phi = -infinity..infinity, x*x[0]/a^2+y*y[0]/b^2-z*z[0]/c^2 = 1," " ]
end proc;
 
end module;

hyp1 := module () export nom, type, equation, param, traceX, traceY, traceZ, info; end module

> hyp1:-equation();

x^2/a^2+y^2/b^2-z^2/c^2 = 1

> X:=spacecurve(op(hyp1:-traceX(3,4,5,2)[1..2]),thickness=3,color=cyan),spacecurve(op(hyp1:-traceX(3,4,5,2)[3..4]), thickness=3, color=cyan):
> Y:=spacecurve(op(hyp1:-traceY(3,4,5,2)[1..2]),thickness=3,color=yellow),spacecurve(op(hyp1:-traceY(3,4,5,2)[3..4]), thickness=3, color=yellow):
> Z:=spacecurve(hyp1:-traceZ(3,4,5,2), thickness=3, color=red):
> Q:=plot3d(hyp1:-param(3,4,5)):
> display([Q,X,Y,Z],orientation=[45,60], scaling=constrained, axes = boxed);

 

[Plot]

---------------------------------------------  HYPERBOLOIDE A DEUX NAPPES  -----------------------------------------------------------

> hyp2 := module()
export nom,type,equation,param,traceX,traceY,traceZ,info;

nom := proc() "Hyperboloide a deux nappes" end proc;
type := proc() HYP2 end proc;
equation := proc() x^2/a^2 + y^2/b^2 - z^2/c^2 = -1 end proc;

param := proc(a,b,c)  
[[a*cos(u)*sinh(v), b*sin(u)*sinh(v), c*cosh(v)], u=0..2*Pi,v=-arccosh(10/c)..arccosh(10/c),
[a*cos(u)*sinh(v), b*sin(u)*sinh(v), -c*cosh(v)], u=0..2*Pi,v=-arccosh(10/c)..arccosh(10/c)]
end proc;

traceX := proc(a,b,c,k)   [[k,sinh(u)*sqrt(k^2+a^2)*b/a,cosh(u)*sqrt(k^2+a^2)*c/a],u=-arccosh(10*a/(c*sqrt(k^2+a^2)))..arccosh(10*a/(c*sqrt(k^2+a^2))),
[k,sinh(u)*sqrt(k^2+a^2)*b/a,-cosh(u)*sqrt(k^2+a^2)*c/a],u=-arccosh(10*a/(c*sqrt(k^2+a^2)))..arccosh(10*a/(c*sqrt(k^2+a^2)))]
end proc;

traceY := proc(a,b,c,k)  
[[sinh(u)*sqrt(k^2+b^2)*a/b,k,cosh(u)*sqrt(k^2+b^2)*c/b],u=-arccosh(10*b/(c*sqrt(k^2+b^2)))..arccosh(10*b/(c*sqrt(k^2+b^2))),
[sinh(u)*sqrt(k^2+b^2)*a/b,k,-cosh(u)*sqrt(k^2+b^2)*c/b],u=-arccosh(10*b/(c*sqrt(k^2+b^2)))..arccosh(10*b/(c*sqrt(k^2+b^2)))]
end proc;

traceZ := proc(a,b,c,k) [ a*sqrt(k^2-c^2)*sin(u)/c, b*sqrt(k^2-c^2)*cos(u)/c, k], u=0..2*Pi end proc;
  
info := proc()
["Quadrique à centre unique.","Surface non réglée.",x=a*sinh(phi)*cos(theta), y=b*sinh(phi)*sin(theta), z=±*c*cosh(phi), theta = 0..2*Pi, phi = -infinity..infinity, x*x[0]/a^2+y*y[0]/b^2-z*z[0]/c^2 = -1," " ]
end proc;
end module;

hyp2 := module () export nom, type, equation, param, traceX, traceY, traceZ, info; end module

> X:=spacecurve(op(hyp2:-traceX(3,5,2,6)[1..2]),thickness=3,color=cyan),spacecurve(op(hyp2:-traceX(3,5,2,6)[3..4]), thickness=3, color=cyan):
> Y:=spacecurve(op(hyp2:-traceY(3,5,2,6)[1..2]),thickness=3,color=yellow),spacecurve(op(hyp2:-traceY(3,5,2,6)[3..4]), thickness=3, color=yellow):
> Z:=spacecurve(hyp2:-traceZ(3,5,2,6), thickness=3, color=red):
> Q:=plot3d(op(hyp2:-param(3,5,2)[1..3])),plot3d(op(hyp2:-param(3,5,2)[4..6])):
> display([Q,X,Y,Z],orientation=[45,60], scaling=unconstrained, axes = boxed);

 

[Plot]

---------------------------------------------  CONE ELLIPTIQUE (OU DU SECOND DEGRE) ------------------------------------------------

> cone := module()
export nom,type,equation,param,traceX,traceY,traceZ,info;

nom := proc() "Cone elliptique" end proc;
type := proc() CONE end proc;

equation := proc() x^2/a^2 + y^2/b^2 - z^2/c^2 = 0 end proc;
param := proc(a,b,c) [a*cos(u)*v, b*sin(u)*v, c*v], u=0..2*Pi,v=-10/c..10/c end proc;

traceX := proc(a,b,c,k)  
if k<>0 then
[[k, k*b/a*sinh(u), k*c/a*cosh(u)], u=-arccosh(10*a/(abs(k)*c))..arccosh(10*a/(abs(k)*c)),
[k, k*b/a*sinh(u), -k*c/a*cosh(u)], u=-arccosh(10*a/(abs(k)*c))..arccosh(10*a/(abs(k)*c))]:
else
[[k,b*u,c*u], u=-10/c..10/c, [k,b*u,-c*u], u=-10/c..10/c ]:
end if;
end proc;

traceY := proc(a,b,c,k)  
if k<>0 then
[[k*a/b*sinh(u),k, k*c/b*cosh(u)], u=-arccosh(10*b/(abs(k)*c))..arccosh(10*b/(abs(k)*c)),
[k*a/b*sinh(u),k, -k*c/b*cosh(u)], u=-arccosh(10*b/(abs(k)*c))..arccosh(10*b/(abs(k)*c))]
else
[[a*u,k,c*u], u=-10/c..10/c, [a*u,k,-c*u], u=-10/c..10/c ]
end if;
end proc;

traceZ := proc(a,b,c,k)  [k*a*cos(u)/c, k*b*sin(u)/c, k], u=0..2*Pi end proc;
  
info := proc()
["Quadrique à centre unique.","Surface réglée.",x=a*lambda*cos(theta), y=b*lambda*sin(theta), z=c*lambda, theta = 0..2*Pi, lambda = -infinity..infinity, x*x[0]/a^2+y*y[0]/b^2-z*z[0]/c^2 = 0," " ]
end proc;
end module;

cone := module () export nom, type, equation, param, traceX, traceY, traceZ, info; end module

> X:=spacecurve(op(cone:-traceX(3,4,5,2)[1..2]),thickness=3,color=cyan),spacecurve(op(cone:-traceX(3
,4,5,2)[3..4]), thickness=3, color=cyan):
> Y:=spacecurve(op(cone:-traceY(3,4,5,2)[1..2]),thickness=3,color=yellow),spacecurve(op(cone:-traceY(3,4,5,2)[3..4]),thickness=3,color=yellow):
> Z:=spacecurve(cone:-traceZ(3,4,5,2), thickness=3, color=red):
> Q:=plot3d(cone:-param(3,4,5)):
> display([Q,X,Y,Z],orientation=[45,60], scaling=constrained, axes = boxed);

[Plot]

---------------------------------------------  PARABOLOIDE ELLIPTIQUE  -----------------------------------------------------------

> parabell := module()
export nom,type,equation,param,traceX,traceY,traceZ,info;

nom := proc() "Paraboloide elliptique" end proc;
type := proc() PARABELL end proc;
equation := proc() x^2/a^2 + y^2/b^2 - z/c = 0 end proc;
param := proc(a,b,c)  [a*cos(u)*v, b*sin(u)*v, c*v^2], u=0..2*Pi, v=0..sqrt(10/c)  end proc;

traceX := proc(a,b,c,k)  
if k^2/a^2<=10/c then
 [[k,b*sqrt(u-k^2/a^2),c*u], u=k^2/a^2..10/c,
  [k,-b*sqrt(u-k^2/a^2),c*u], u=k^2/a^2..10/c]
else
 [[0,0,0], u=-a..a, [0,0,0], u=-a..a ]
end if;
end proc;

traceY := proc(a,b,c,k)  
if k^2/b^2<=10/c then
[[a*sqrt(u-k^2/b^2),k,c*u], u=k^2/b^2..10/c ,
 [-a*sqrt(u-k^2/b^2),k,c*u], u=k^2/b^2..10/c ]
else
[ [0,0,0], u=-a..a, [0,0,0], u=-a..a ]
end if;
end proc;

traceZ := proc(a,b,c,k)  
if k>0 then
   [a*cos(u)*sqrt(k/c),b*sin(u)*sqrt(k/c),k], u=0..2*Pi
else [0,0,0], u=-a..a;
end if;
end proc;

info := proc()
["Quadrique sans centre.","Surface non réglée.",x=a*lambda*cos(theta), y=b*lambda*sin(theta), z=c*lambda^2, theta = 0..2*Pi, lambda = 0..infinity, x*x[0]/a^2+y*y[0]/b^2-(z+z[0])/(2*c) = 0," " ]
end proc;
 
end module;

parabell := module () export nom, type, equation, param, traceX, traceY, traceZ, info; end module

> X:=spacecurve(op(parabell:-traceX(3,5,4,2)[1..2]),thickness=3,color=cyan),spacecurve(op(parabell:-traceX(3,4,5,2)[3..4]), thickness=3, color=cyan):
> Y:=spacecurve(op(parabell:-traceY(3,5,4,2)[1..2]),thickness=3,color=yellow),spacecurve(op(parabell:-traceY(3,4,5,2)[3..4]),thickness=3,color=yellow):
> Z:=spacecurve(parabell:-traceZ(3,5,4,2), thickness=3, color=red):
> Q:=plot3d(parabell:-param(3,5,4)):
> display([Q,X,Y,Z],orientation=[45,60], scaling=unconstrained, axes = boxed);

 

[Plot]

---------------------------------------------  PARABOLOIDE HYPERBOLIQUE -----------------------------------------------------------

> parabhyp := module()
export nom,type,equation,param,traceX,traceY,traceZ,info;

nom := proc() "Paraboloide hyperbolique" end proc;
type := proc() PARABHYP end proc;
equation := proc() x^2/a^2 - y^2/b^2 - z/c = 0 end proc;
param := proc(a,b,c) [u,v, c*(u^2/a^2-v^2/b^2)], u=-10..10, v=-10..10 end proc;
traceX := proc(a,b,c,k)  [k,u,c*(k^2/a^2-u^2/b^2)], u=-10..10  end proc;
traceY := proc(a,b,c,k)  [u,k,c*(u^2/a^2-k^2/b^2)], u=-10..10 end proc;

traceZ := proc(a,b,c,k)
 [[a*sqrt(u^2/b^2+k/c), u, k], u=-10..10 , [-a*sqrt(u^2/b^2+k/c), u, k], u=-10..10 ]
end proc;

info := proc()
["Quadrique sans centre.","Surface réglée.",x=theta, y=lambda, z=c*(theta^2/a^2-lambda^2/b^2), theta = -infinity..infinity, lambda = -infinity..infinity, x*x[0]/a^2-y*y[0]/b^2-(z+z[0])/(2*c) = 0,"Dans un repère convenable, une équation est: xy=z." ]
end proc;  
end module;

parabhyp := module () export nom, type, equation, param, traceX, traceY, traceZ, info; end module

> X:=spacecurve(parabhyp:-traceX(3,4,5,2),thickness=3,color=cyan):
> Y:=spacecurve(parabhyp:-traceY(3,4,5,2),thickness=3,color=yellow):
> Z:=spacecurve(op(parabhyp:-traceZ(3,4,5,2)[1..2]),thickness=3,color=red,view=[-10..10,-10..10,-10..10]),spacecurve(op(parabhyp:-traceZ(3,4,5,2)[3..4]),thickness=3,color=red,view=[-10..10,-10..10,-10..10]):
> Q:=plot3d(parabhyp:-param(3,4,5)):
> display([Q,X,Y,Z],orientation=[45,60],scaling=unconstrained,axes=boxed);

 

[Plot]

---------------------------------------------  CYLINDRE ELLIPTIQUE -----------------------------------------------------------

> cylell := module()
export nom,type,equation,param,traceX,traceY,traceZ,info;

nom := proc() "Cylindre elliptique" end proc;  
type := proc() CYLELL end proc;
equation := proc() x^2/a^2 + y^2/b^2 = 1 end proc;
param := proc(a,b,c) [a*cos(u), b*sin(u), v] ,u=0..2*Pi, v=-10..10 end proc;

traceX := proc(a,b,c,k)  
 [[k,b*sqrt(1-k^2/a^2),c*u],u=-10/c..10/c,
  [k,-b*sqrt(1-k^2/a^2),c*u],u=-10/c..10/c ]
end proc;

traceY := proc(a,b,c,k)
[[a*sqrt(1-k^2/b^2),k,c*u],u=-10/c..10/c,
[-a*sqrt(1-k^2/b^2),k,c*u],u=-10/c..10/c ]
end proc;

traceZ := proc(a,b,c,k)  [a*cos(u),b*sin(u),k],u=0..2*Pi end proc;
  
info := proc()
["Quadrique admettant une droite des centres (l'axe du cylindre).","Surface réglée.",x=a*cos(theta), y=b*sin(theta), z=lambda, theta = 0..2*Pi, lambda = -infinity..infinity, x*x[0]/a^2+y*y[0]/b^2 = 1," " ]
end proc;
end module;

cylell := module () export nom, type, equation, param, traceX, traceY, traceZ, info; end module

> X:=spacecurve(op(cylell:-traceX(3,4,5,2)[1..2]),thickness=3,color=cyan),spacecurve(op(cylell:-traceX(3,4,5,2)[3..4]),thickness=3,color=cyan):
> Y:=spacecurve(op(cylell:-traceY(3,4,5,2)[1..2]),thickness=3,color=yellow),spacecurve(op(cylell:-traceY(3,4,5,2)[3..4]),thickness=3,color=yellow):
> Z:=spacecurve(cylell:-traceZ(3,4,5,2),thickness=3,color=red):
> Q:=plot3d(cylell:-param(3,4,5)):
> display([Q,X,Y,Z],orientation=[45,60],scaling=unconstrained,axes=boxed);

 

[Plot]

---------------------------------------------  CYLINDRE HYPERBOLIQUE -----------------------------------------------------------

> cylhyp := module()
export nom,type,equation,param,traceX,traceY,traceZ,info;

nom := proc() "Cylindre hyperbolique" end proc;
type := proc() CYLHYP end proc;
equation := proc() x^2/a^2 - y^2/b^2 = 1 end proc;
param := proc(a,b,c)   
 [[a*cosh(u), b*sinh(u), v], u=-arcsinh(10/b)..arcsinh(10/b), v=-10..10,
  [-a*cosh(u), b*sinh(u), v], u=-arcsinh(10/b)..arcsinh(10/b), v=-10..10 ]
  end proc;

traceX := proc(a,b,c,k)  
 [[k,b*sqrt(-1+k^2/a^2),c*u],u=-10/c..10/c,
  [k,-b*sqrt(-1+k^2/a^2),c*u],u=-10/c..10/c ]
end proc;

traceY := proc(a,b,c,k)  
 [[a*sqrt(1+k^2/b^2),k,c*u],u=-10/c..10/c,
  [-a*sqrt(1+k^2/b^2),k,c*u],u=-10/c..10/c ]
end proc;

traceZ := proc(a,b,c,k)
[[a*cosh(u),b*sinh(u),k],u=-10..10,
 [-a*cosh(u),b*sinh(u),k],u=-10..10 ]
end proc;
  
info := proc()
["Quadrique admettant une droite des centres (l'axe du cylindre).","Surface réglée.",x=±*a*cosh(theta), y=b*sinh(theta), z=lambda, theta = -infinity..infinity, lambda = -infinity..infinity, x*x[0]/a^2-y*y[0]/b^2 = 1," " ]
end proc;
end module;

cylhyp := module () export nom, type, equation, param, traceX, traceY, traceZ, info; end module

> X:=spacecurve(op(cylhyp:-traceX(3,4,5,6)[1..2]),thickness=3,color=cyan),spacecurve(op(cylhyp:-traceX(3,4,5,6)[3..4]),thickness=3,color=cyan):
> Y:=spacecurve(op(cylhyp:-traceY(3,4,5,6)[1..2]),thickness=3,color=yellow),spacecurve(op(cylhyp:-traceY(3,4,5,6)[3..4]),thickness=3,color=yellow):
> Z:=spacecurve(op(cylhyp:-traceZ(3,4,5,6)[1..2]),thickness=3,color=red),spacecurve(op(cylhyp:-traceZ(3,4,5,6)[3..4]),thickness=3,color=red):
> Q:=plot3d(op(cylhyp:-param(3,4,5)[1..3])),plot3d(op(cylhyp:-param(3,4,5)[4..6])):
> display([Q,X,Y,Z],orientation=[45,60],scaling=unconstrained,axes=boxed,view=[-10..10,-10..10,-10..10]);

 

[Plot]

---------------------------------------------  CYLINDRE PARABOLIQUE -----------------------------------------------------------

> cylparab := module()
export nom,type,equation,param,traceX,traceY,traceZ,info;

nom := proc() "Cylindre parabolique" end proc;
type := proc() CYLPARAB end proc;
equation := proc() x^2 = 2*a*y end proc;
param := proc(a,b,c)  [u, u^2/(2*a), v], u=-10..10, v=-10..10 end proc;
traceX := proc(a,b,c,k)  [k,k^2/(2*a),u],u=-10..10 end proc;

traceY := proc(a,b,c,k)   
[[sqrt(2*a*k),k,u],u=-10..10,
 [-sqrt(2*a*k),k,u],u=-10..10 ]
end proc;

traceZ := proc(a,b,c,k)  [u,u^2/(2*a),k],u=-10..10 end proc;
  
info := proc()
["Quadrique sans centre.","Surface réglée.",x=theta, y=theta^2/(2*a), z=lambda, theta = -infinity..infinity, lambda = -infinity..infinity, x*x[0]-a*(y+y[0]) = 0," " ]
end proc;

end module;

cylparab := module () export nom, type, equation, param, traceX, traceY, traceZ, info; end module

> X:=spacecurve(cylparab:-traceX(3,4,5,8),thickness=3,color=cyan):
> Y:=spacecurve(op(cylparab:-traceY(3,4,5,8)[1..2]),thickness=3,color=yellow),spacecurve(op(cylparab:-traceY(3,4,5,8)[3..4]),thickness=3,color=yellow):
> Z:=spacecurve(cylparab:-traceZ(3,4,5,8),thickness=3,color=red):
> Q:=plot3d(cylparab:-param(3,4,5)):
> display([Q,X,Y,Z],orientation=[45,60],scaling=unconstrained,axes=boxed);

 

[Plot]

------------------------------------------------------  GESTION DES OPTIONS  --------------------------------------------------------------------------

> optionAxes:=proc()
  MesOptions[1]
end proc:
 
> optionRepere:=proc()
  MesOptions[2]
end proc:
 
> optionProj:=proc()
  MesOptions[3]
end proc:
 
> optionOmbre:=proc()
  MesOptions[4]
end proc:
 
> optionLumiere:=proc()
  MesOptions[5]
end proc:
 
> optionStyle:=proc()
 MesOptions[6]
end proc:
 
> optionType:=proc()
 MesOptions[7]
end proc:
 
  MiseAJourOptions:=proc()
global MesOptions;
local opt,equation,visibleSliders;
opt:=NULL:visibleSliders:=[true,true]:
# option Axes
 if Maplets:-Tools:-Get('MenuAxes1'('value')) then opt:=opt,NORMAL end if:
 if Maplets:-Tools:-Get('MenuAxes2'('value')) then opt:=opt,BOXED end if:
 if Maplets:-Tools:-Get('MenuAxes3'('value')) then opt:=opt,FRAMED end if:
 if Maplets:-Tools:-Get('MenuAxes4'('value')) then opt:=opt,NONE end if:
# option Repère
 if Maplets:-Tools:-Get('MenuRepere1'('value')) then opt:=opt,CONSTRAINED end if:
 if Maplets:-Tools:-Get('MenuRepere2'('value')) then opt:=opt,UNCONSTRAINED end if:
# option Projection
 if Maplets:-Tools:-Get('MenuProj1'('value')) then opt:=opt,NORMAL end if:
 if Maplets:-Tools:-Get('MenuProj2'('value')) then opt:=opt,ORTHOGONAL end if:
 if Maplets:-Tools:-Get('MenuProj3'('value')) then opt:=opt,FISHEYE end if:
# option Ombre
 if Maplets:-Tools:-Get('MenuOmbre1'('value')) then opt:=opt,XYZ end if:
 if Maplets:-Tools:-Get('MenuOmbre2'('value')) then opt:=opt,XY end if:
 if Maplets:-Tools:-Get('MenuOmbre3'('value')) then opt:=opt,Z end if:
 if Maplets:-Tools:-Get('MenuOmbre4'('value')) then opt:=opt,ZGRAYSCALE end if:
 if Maplets:-Tools:-Get('MenuOmbre5'('value')) then opt:=opt,ZHUE end if:
 if Maplets:-Tools:-Get('MenuOmbre6'('value')) then opt:=opt,NONE end if:
# option Lumière
 if Maplets:-Tools:-Get('MenuLumiere1'('value')) then opt:=opt,light1 end if:
 if Maplets:-Tools:-Get('MenuLumiere2'('value')) then opt:=opt,light2 end if:
 if Maplets:-Tools:-Get('MenuLumiere3'('value')) then opt:=opt,light3 end if:
 if Maplets:-Tools:-Get('MenuLumiere4'('value')) then opt:=opt,light4 end if:
 if Maplets:-Tools:-Get('MenuLumiere5'('value')) then opt:=opt,NONE end if:
# option Style
 if Maplets:-Tools:-Get('MenuStyle1'('value')) then opt:=opt,PATCH end if:
 if Maplets:-Tools:-Get('MenuStyle2'('value')) then opt:=opt,HIDDEN end if:
 if Maplets:-Tools:-Get('MenuStyle3'('value')) then opt:=opt,WIREFRAME end if:
 if Maplets:-Tools:-Get('MenuStyle4'('value')) then opt:=opt,CONTOUR end if:
 if Maplets:-Tools:-Get('MenuStyle5'('value')) then opt:=opt,PATCHNOGRID end if:
 if Maplets:-Tools:-Get('MenuStyle6'('value')) then opt:=opt,PATCHCONTOUR end if:
 if Maplets:-Tools:-Get('MenuStyle7'('value')) then opt:=opt,LINE end if:
 if Maplets:-Tools:-Get('MenuStyle8'('value')) then opt:=opt,POINT end if:
# option Type de Quadrique et fenetre Information
 if Maplets:-Tools:-Get('MenuType1'('value')) then
   opt:=opt,ellipsoide:-type(): equation:=ellipsoide:-equation():
 end if:
 if Maplets:-Tools:-Get('MenuType2'('value')) then
   opt:=opt,hyp1:-type(): equation:=hyp1:-equation():  
 end if:
 if Maplets:-Tools:-Get('MenuType3'('value')) then
   opt:=opt,hyp2:-type(): equation:=hyp2:-equation():
 end if:
 if Maplets:-Tools:-Get('MenuType4'('value')) then
   opt:=opt,cone:-type(): equation:=cone:-equation():
 end if:
 if Maplets:-Tools:-Get('MenuType5'('value')) then
   opt:=opt,parabell:-type(): equation:=parabell:-equation():
 end if:
 if Maplets:-Tools:-Get('MenuType6'('value')) then
   opt:=opt,parabhyp:-type(): equation:=parabhyp:-equation():
 end if:
 if Maplets:-Tools:-Get('MenuType7'('value')) then
   opt:=opt,cylell:-type(): equation:=cylell:-equation(): visibleSliders:=[true,false]:
 end if:
 if Maplets:-Tools:-Get('MenuType8'('value')) then
   opt:=opt,cylhyp:-type(): equation:=cylhyp:-equation(): visibleSliders:=[true,false]:
 end if:
 if Maplets:-Tools:-Get('MenuType9'('value')) then
   opt:=opt,cylparab:-type(): equation:=cylparab:-equation(): visibleSliders:=[false,false]:
 end if:

# mise à jour de l'équation et des Sliders:
Maplets:-Tools:-Set('MMLV'('value')=MathML[Export](equation) ):  
Maplets:-Tools:-Set('bLabel'('visible')= visibleSliders[1]):
Maplets:-Tools:-Set('cLabel'('visible')= visibleSliders[2]):
Maplets:-Tools:-Set('b'('visible')= visibleSliders[1]):
Maplets:-Tools:-Set('c'('visible')= visibleSliders[2]):

MesOptions:=[opt]:
end proc:
 

 

> MiseAJourInfo:=proc()
# option Type de Quadrique et fenetre Information
 if Maplets:-Tools:-Get('MenuType1'('value')) then
   Maplets:-Tools:-Set('Titre'('caption')=ellipsoide:-nom()):
   Maplets:-Tools:-Set('MMLV1'('value')=MathML[Export](ellipsoide:-equation())):
   Maplets:-Tools:-Set('MMLV2'('value')=MathML[Export](ellipsoide:-info()[3])):
   Maplets:-Tools:-Set('MMLV3'('value')=MathML[Export](ellipsoide:-info()[4])):
   Maplets:-Tools:-Set('MMLV4'('value')=MathML[Export](ellipsoide:-info()[5])):
   Maplets:-Tools:-Set('MMLV5'('value')=MathML[Export](ellipsoide:-info()[6])):
   Maplets:-Tools:-Set('MMLV6'('value')=MathML[Export](ellipsoide:-info()[7])):
   Maplets:-Tools:-Set('MMLV7'('value')=MathML[Export](ellipsoide:-info()[8])):
   Maplets:-Tools:-Set('Centre'('caption')=ellipsoide:-info()[1]):
   Maplets:-Tools:-Set('Reglee'('caption')=ellipsoide:-info()[2]):
   Maplets:-Tools:-Set('Rem'('caption')=ellipsoide:-info()[9]):
end if:

if Maplets:-Tools:-Get('MenuType2'('value')) then
   Maplets:-Tools:-Set('Titre'('caption')=hyp1:-nom()):
   Maplets:-Tools:-Set('MMLV1'('value')=MathML[Export](hyp1:-equation())):
   Maplets:-Tools:-Set('MMLV2'('value')=MathML[Export](hyp1:-info()[3])):
   Maplets:-Tools:-Set('MMLV3'('value')=MathML[Export](hyp1:-info()[4])):
   Maplets:-Tools:-Set('MMLV4'('value')=MathML[Export](hyp1:-info()[5])):
   Maplets:-Tools:-Set('MMLV5'('value')=MathML[Export](hyp1:-info()[6])):
   Maplets:-Tools:-Set('MMLV6'('value')=MathML[Export](hyp1:-info()[7])):
   Maplets:-Tools:-Set('MMLV7'('value')=MathML[Export](hyp1:-info()[8])):
   Maplets:-Tools:-Set('Centre'('caption')=hyp1:-info()[1]):
   Maplets:-Tools:-Set('Reglee'('caption')=hyp1:-info()[2]):
   Maplets:-Tools:-Set('Rem'('caption')=hyp1:-info()[9]):
 end if:
 
 if Maplets:-Tools:-Get('MenuType3'('value')) then
   Maplets:-Tools:-Set('Titre'('caption')=hyp2:-nom()):
   Maplets:-Tools:-Set('MMLV1'('value')=MathML[Export](hyp2:-equation())):
   Maplets:-Tools:-Set('MMLV2'('value')=MathML[Export](hyp2:-info()[3])):
   Maplets:-Tools:-Set('MMLV3'('value')=MathML[Export](hyp2:-info()[4])):
   Maplets:-Tools:-Set('MMLV4'('value')=MathML[Export](hyp2:-info()[5])):
   Maplets:-Tools:-Set('MMLV5'('value')=MathML[Export](hyp2:-info()[6])):
   Maplets:-Tools:-Set('MMLV6'('value')=MathML[Export](hyp2:-info()[7])):
   Maplets:-Tools:-Set('MMLV7'('value')=MathML[Export](hyp2:-info()[8])):
   Maplets:-Tools:-Set('Centre'('caption')=hyp2:-info()[1]):
   Maplets:-Tools:-Set('Reglee'('caption')=hyp2:-info()[2]):
   Maplets:-Tools:-Set('Rem'('caption')=hyp2:-info()[9]):
 end if:

 if Maplets:-Tools:-Get('MenuType4'('value')) then
   Maplets:-Tools:-Set('Titre'('caption')=cone:-nom()):
   Maplets:-Tools:-Set('MMLV1'('value')=MathML[Export](cone:-equation())):
   Maplets:-Tools:-Set('MMLV2'('value')=MathML[Export](cone:-info()[3])):
   Maplets:-Tools:-Set('MMLV3'('value')=MathML[Export](cone:-info()[4])):
   Maplets:-Tools:-Set('MMLV4'('value')=MathML[Export](cone:-info()[5])):
   Maplets:-Tools:-Set('MMLV5'('value')=MathML[Export](cone:-info()[6])):
   Maplets:-Tools:-Set('MMLV6'('value')=MathML[Export](cone:-info()[7])):
   Maplets:-Tools:-Set('MMLV7'('value')=MathML[Export](cone:-info()[8])):
   Maplets:-Tools:-Set('Centre'('caption')=cone:-info()[1]):
   Maplets:-Tools:-Set('Reglee'('caption')=cone:-info()[2]):
   Maplets:-Tools:-Set('Rem'('caption')=cone:-info()[9]):
 end if:

 if Maplets:-Tools:-Get('MenuType5'('value')) then
   Maplets:-Tools:-Set('Titre'('caption')=parabell:-nom()):
   Maplets:-Tools:-Set('MMLV1'('value')=MathML[Export](parabell:-equation())):
   Maplets:-Tools:-Set('MMLV2'('value')=MathML[Export](parabell:-info()[3])):
   Maplets:-Tools:-Set('MMLV3'('value')=MathML[Export](parabell:-info()[4])):
   Maplets:-Tools:-Set('MMLV4'('value')=MathML[Export](parabell:-info()[5])):
   Maplets:-Tools:-Set('MMLV5'('value')=MathML[Export](parabell:-info()[6])):
   Maplets:-Tools:-Set('MMLV6'('value')=MathML[Export](parabell:-info()[7])):
   Maplets:-Tools:-Set('MMLV7'('value')=MathML[Export](parabell:-info()[8])):
   Maplets:-Tools:-Set('Centre'('caption')=parabell:-info()[1]):
   Maplets:-Tools:-Set('Reglee'('caption')=parabell:-info()[2]):
   Maplets:-Tools:-Set('Rem'('caption')=parabell:-info()[9]):
 end if:

 if Maplets:-Tools:-Get('MenuType6'('value')) then
   Maplets:-Tools:-Set('Titre'('caption')=parabhyp:-nom()):
   Maplets:-Tools:-Set('MMLV1'('value')=MathML[Export](parabhyp:-equation())):
   Maplets:-Tools:-Set('MMLV2'('value')=MathML[Export](parabhyp:-info()[3])):
   Maplets:-Tools:-Set('MMLV3'('value')=MathML[Export](parabhyp:-info()[4])):
   Maplets:-Tools:-Set('MMLV4'('value')=MathML[Export](parabhyp:-info()[5])):
   Maplets:-Tools:-Set('MMLV5'('value')=MathML[Export](parabhyp:-info()[6])):
   Maplets:-Tools:-Set('MMLV6'('value')=MathML[Export](parabhyp:-info()[7])):
   Maplets:-Tools:-Set('MMLV7'('value')=MathML[Export](parabhyp:-info()[8])):
   Maplets:-Tools:-Set('Centre'('caption')=parabhyp:-info()[1]):
   Maplets:-Tools:-Set('Reglee'('caption')=parabhyp:-info()[2]):
   Maplets:-Tools:-Set('Rem'('caption')=parabhyp:-info()[9]):
 end if:

 if Maplets:-Tools:-Get('MenuType7'('value')) then
   Maplets:-Tools:-Set('Titre'('caption')=cylell:-nom()):
   Maplets:-Tools:-Set('MMLV1'('value')=MathML[Export](cylell:-equation())):
   Maplets:-Tools:-Set('MMLV2'('value')=MathML[Export](cylell:-info()[3])):
   Maplets:-Tools:-Set('MMLV3'('value')=MathML[Export](cylell:-info()[4])):
   Maplets:-Tools:-Set('MMLV4'('value')=MathML[Export](cylell:-info()[5])):
   Maplets:-Tools:-Set('MMLV5'('value')=MathML[Export](cylell:-info()[6])):
   Maplets:-Tools:-Set('MMLV6'('value')=MathML[Export](cylell:-info()[7])):
   Maplets:-Tools:-Set('MMLV7'('value')=MathML[Export](cylell:-info()[8])):
   Maplets:-Tools:-Set('Centre'('caption')=cylell:-info()[1]):
   Maplets:-Tools:-Set('Reglee'('caption')=cylell:-info()[2]):
   Maplets:-Tools:-Set('Rem'('caption')=cylell:-info()[9]):
 end if:

 if Maplets:-Tools:-Get('MenuType8'('value')) then
   Maplets:-Tools:-Set('Titre'('caption')=cylhyp:-nom()):
   Maplets:-Tools:-Set('MMLV1'('value')=MathML[Export](cylhyp:-equation())):
   Maplets:-Tools:-Set('MMLV2'('value')=MathML[Export](cylhyp:-info()[3])):
   Maplets:-Tools:-Set('MMLV3'('value')=MathML[Export](cylhyp:-info()[4])):
   Maplets:-Tools:-Set('MMLV4'('value')=MathML[Export](cylhyp:-info()[5])):
   Maplets:-Tools:-Set('MMLV5'('value')=MathML[Export](cylhyp:-info()[6])):
   Maplets:-Tools:-Set('MMLV6'('value')=MathML[Export](cylhyp:-info()[7])):
   Maplets:-Tools:-Set('MMLV7'('value')=MathML[Export](cylhyp:-info()[8])):
   Maplets:-Tools:-Set('Centre'('caption')=cylhyp:-info()[1]):
   Maplets:-Tools:-Set('Reglee'('caption')=cylhyp:-info()[2]):
   Maplets:-Tools:-Set('Rem'('caption')=cylhyp:-info()[9]):
 end if:

 if Maplets:-Tools:-Get('MenuType9'('value')) then
   Maplets:-Tools:-Set('Titre'('caption')=cylparab:-nom()):
   Maplets:-Tools:-Set('MMLV1'('value')=MathML[Export](cylparab:-equation())):
   Maplets:-Tools:-Set('MMLV2'('value')=MathML[Export](cylparab:-info()[3])):
   Maplets:-Tools:-Set('MMLV3'('value')=MathML[Export](cylparab:-info()[4])):
   Maplets:-Tools:-Set('MMLV4'('value')=MathML[Export](cylparab:-info()[5])):
   Maplets:-Tools:-Set('MMLV5'('value')=MathML[Export](cylparab:-info()[6])):
   Maplets:-Tools:-Set('MMLV6'('value')=MathML[Export](cylparab:-info()[7])):
   Maplets:-Tools:-Set('MMLV7'('value')=MathML[Export](cylparab:-info()[8])):
   Maplets:-Tools:-Set('Centre'('caption')=cylparab:-info()[1]):
   Maplets:-Tools:-Set('Reglee'('caption')=cylparab:-info()[2]):
   Maplets:-Tools:-Set('Rem'('caption')=cylparab:-info()[9]):
 end if
end proc:
 

--------------------------------------------  GRAPHE DE LA QUADRIQUE ET DES SECTIONS ---------------------------------------------------------

> Quadrique:= proc(a, b, c, vView, hView)
local type,opt;
type:=optionType();
opt:=axes=optionAxes(), orientation=[hView, vView],scaling=optionRepere() , projection=optionProj(), shading=optionOmbre(), lightmodel=optionLumiere(), style=optionStyle(), titlefont = [TIMES, BOLD, 14]:

if type=ELLIPSOIDE then
plot3d(ellipsoide:-param(a,b,c), opt, title=ellipsoide:-nom())
elif type=HYP1 then
plot3d(hyp1:-param(a,b,c), opt, title=hyp1:-nom())
elif type=HYP2 then
display( [plot3d(op(hyp2:-param(a,b,c)[1..3])),plot3d(op(hyp2:-param(a,b,c)[4..6]))], opt, title=hyp2:-nom())
elif type=CONE then
plot3d(cone:-param(a,b,c), opt, title=cone:-nom())
elif type=PARABELL then
plot3d(parabell:-param(a,b,c), opt, title=parabell:-nom())
elif type=PARABHYP then
plot3d(parabhyp:-param(a,b,c), opt, title=parabhyp:-nom())
elif type=CYLELL then
plot3d(cylell:-param(a,b,c), opt, title=cylell:-nom())
elif type=CYLHYP then
display( [plot3d(op(cylhyp:-param(a,b,c)[1..3])),plot3d(op(cylhyp:-param(a,b,c)[4..6]))], opt, title=cylhyp:-nom())
else # CYLPARAB
plot3d(cylparab:-param(a,b,c), opt, title=cylparab:-nom())
end if;
end proc:

 
> QuadSectionX := proc(k, a, b, c, hV, vV)
global GrapheX;
local x,type;
type:=optionType();

if type=ELLIPSOIDE then
x:=spacecurve(ellipsoide:-traceX(a,b,c,k), thickness=3, color=cyan), spacecurve([t,0,0], t=-a..a,
color=white);
elif type=HYP1 then
x:=spacecurve(op(hyp1:-traceX(a,b,c,k)[1..2]),thickness=3,color=cyan),spacecurve(op(hyp1:-traceX(a,b,c,k)[3..4]), thickness=3, color=cyan), spacecurve([t,0,0], t=-a..a, color=white);
elif type=HYP2 then
x:=spacecurve(op(hyp2:-traceX(a,b,c,k)[1..2]),thickness=3,color=cyan),spacecurve(op(hyp2:-traceX(a,b,c,k)[3..4]), thickness=3, color=cyan), spacecurve([t,0,0], t=-a..a, color=white);
elif type=CONE then
x:=spacecurve(op(cone:-traceX(a,b,c,k)[1..2]),thickness=3,color=cyan),spacecurve(op(cone:-traceX(a,b,c,k)[3..4]), thickness=3, color=cyan), spacecurve([t,0,0], t=-a..a, color=white);
elif type=PARABELL then
x:=spacecurve(op(parabell:-traceX(a,b,c,k)[1..2]),thickness=3,color=cyan),spacecurve(op(parabell:-traceX(a,b,c,k)[3..4]), thickness=3, color=cyan), spacecurve([t,0,0], t=-a..a, color=white);
elif type=PARABHYP then
x:=spacecurve(parabhyp:-traceX(a,b,c,k), thickness=3, color=cyan), spacecurve([t,0,0], t=-a..a,
color=white);
elif type=CYLELL then
x:=spacecurve(op(cylell:-traceX(a,b,c,k)[1..2]),thickness=3,color=cyan),spacecurve(op(cylell:-traceX(a,b,c,k)[3..4]), thickness=3, color=cyan), spacecurve([t,0,0], t=-a..a, color=white);
elif type=CYLHYP then
x:=spacecurve(op(cylhyp:-traceX(a,b,c,k)[1..2]),thickness=3,color=cyan),spacecurve(op(cylhyp:-traceX(a,b,c,k)[3..4]), thickness=3, color=cyan), spacecurve([t,0,0], t=-a..a, color=white);
else # CYLPARAB
x:=spacecurve(cylparab:-traceX(a,b,c,k), thickness=3, color=cyan), spacecurve([t,0,0], t=-a..a,
color=white);
end if;

GrapheX:=display ([x], axes=optionAxes() , orientation=[hV,vV],scaling=optionRepere() , projection=optionProj(), shading=optionOmbre(), lightmodel=optionLumiere(), style=optionStyle()):
end proc:

 
> QuadSectionY := proc (k, a, b, c, hV,vV)
global GrapheY;
local y,type;
type:=optionType();

if type=ELLIPSOIDE then
y:=spacecurve(ellipsoide:-traceY(a,b,c,k), thickness=3, color=yellow), spacecurve([t,0,0], t=-a..a,
color=white);
elif type=HYP1 then
y:=spacecurve(op(hyp1:-traceY(a,b,c,k)[1..2]),thickness=3,color=yellow),spacecurve(op(hyp1:-traceY(a,b,c,k)[3..4]), thickness=3, color=yellow), spacecurve([t,0,0], t=-a..a, color=white);
elif type=HYP2 then
y:=spacecurve(op(hyp2:-traceY(a,b,c,k)[1..2]),thickness=3,color=yellow),spacecurve(op(hyp2:-traceY(a,b,c,k)[3..4]), thickness=3, color=yellow), spacecurve([t,0,0], t=-a..a, color=white);
elif type=CONE then
y:=spacecurve(op(cone:-traceY(a,b,c,k)[1..2]),thickness=3,color=yellow),spacecurve(op(cone:-traceY(a,b,c,k)[3..4]),thickness=3,color=yellow), spacecurve([t,0,0], t=-a..a, color=white);
elif type=PARABELL then
y:=spacecurve(op(parabell:-traceY(a,b,c,k)[1..2]),thickness=3,color=yellow),spacecurve(op(parabell:-traceY(a,b,c,k)[3..4]),thickness=3,color=yellow), spacecurve([t,0,0], t=-a..a, color=white);
elif type=PARABHYP then
y:=spacecurve(parabhyp:-traceY(a,b,c,k), thickness=3, color=yellow), spacecurve([t,0,0], t=-a..a,
color=white);
elif type=CYLELL then
y:=spacecurve(op(cylell:-traceY(a,b,c,k)[1..2]),thickness=3,color=yellow),spacecurve(op(cylell:-traceY(a,b,c,k)[3..4]), thickness=3, color=yellow), spacecurve([t,0,0], t=-a..a, color=white);
elif type=CYLHYP then
y:=spacecurve(op(cylhyp:-traceY(a,b,c,k)[1..2]),thickness=3,color=yellow),spacecurve(op(cylhyp:-traceY(a,b,c,k)[3..4]), thickness=3, color=yellow), spacecurve([t,0,0], t=-a..a, color=white);
else #CYLPARAB
y:=spacecurve(op(cylparab:-traceY(a,b,c,k)[1..2]),thickness=3,color=yellow),spacecurve(op(cylparab:-traceY(a,b,c,k)[3..4]), thickness=3, color=yellow), spacecurve([t,0,0], t=-a..a, color=white);
end if;

GrapheY:=display ([y], axes=optionAxes() , orientation=[hV,vV],scaling=optionRepere() , projection=optionProj(),shading=optionOmbre(), lightmodel=optionLumiere(), style=optionStyle()):
end proc:

 
> QuadSectionZ := proc (k, a, b, c, hV,vV)
global GrapheZ;
local z,type,vw;
type:=optionType();
vw:=view=[-10..10,-10..10,-10..10];

if type=ELLIPSOIDE then
z:=spacecurve(ellipsoide:-traceZ(a,b,c,k), thickness=3, color=red), spacecurve([t,0,0], t=-a..a,
color=white);
elif type=HYP1 then
z:=spacecurve(hyp1:-traceZ(a,b,c,k), thickness=3, color=red), spacecurve([t,0,0], t=-a..a,
color=white);
elif type=HYP2 then
z:=spacecurve(hyp2:-traceZ(a,b,c,k), thickness=3, color=red), spacecurve([t,0,0], t=-a..a,
color=white);
elif type=CONE then
z:=spacecurve(cone:-traceZ(a,b,c,k), thickness=3, color=red), spacecurve([t,0,0], t=-a..a,
color=white);
elif type=PARABELL then
z:=spacecurve(parabell:-traceZ(a,b,c,k), thickness=3, color=red), spacecurve([t,0,0], t=-a..a,
color=white);
elif type=PARABHYP then
z:=spacecurve(op(parabhyp:-traceZ(a,b,c,k)[1..2]),thickness=3,color=red,vw),spacecurve(op(parabhyp:-traceZ(a,b,c,k)[3..4]),thickness=3,color=red,vw), spacecurve([t,0,0], t=-a..a, color=white);
elif type=CYLELL then
z:=spacecurve(cylell:-traceZ(a,b,c,k), thickness=3, color=red), spacecurve([t,0,0], t=-a..a,
color=white);
elif type=CYLHYP then
z:=spacecurve(op(cylhyp:-traceZ(a,b,c,k)[1..2]),thickness=3,color=red,vw),spacecurve(op(cylhyp:-traceZ(a,b,c,k)[3..4]),thickness=3,color=red,vw), spacecurve([t,0,0], t=-a..a, color=white);
else # CYLPARAB
z:=spacecurve(cylparab:-traceZ(a,b,c,k), thickness=3, color=red), spacecurve([t,0,0], t=-a..a,
color=white);
end if;

GrapheZ:=display ([z], axes=optionAxes() , orientation=[hV,vV],scaling=optionRepere() , projection=optionProj(),shading=optionOmbre(), lightmodel=optionLumiere(), style=optionStyle()):
end proc:

 
> Vide:= proc(a,hV,vV)
display([spacecurve([t,0,0], t=-a..a, color = white)],axes=optionAxes() , orientation=[hV,vV],scaling=optionRepere() , projection=optionProj(), shading=optionOmbre(), lightmodel=optionLumiere(), style=optionStyle())
end proc:

 
> TraceQuadSectionX:=proc(xsect,valX,a,b,c, hV,vV)
  if xsect then
     QuadSectionX(valX,a,b,c, hV,vV)
  else           
     Vide(a, hV,vV)
end if;
end proc:

 
> TraceQuadSectionY:=proc(ysect,valY,a,b,c, hV,vV)  
 if ysect then
     QuadSectionY(valY,a,b,c, hV,vV)
  else
     Vide(a, hV,vV):
end if;
end proc:

 
> TraceQuadSectionZ:=proc(zsect,valZ,a,b,c, hV,vV)   
 if zsect then
   QuadSectionZ(valZ,a,b,c, hV,vV)
  else
   Vide(a, hV,vV)
end if;
end proc:
 

 

--------------------------------------------  GESTIONNAIRE D'ERREURS  --------------------------------------------------------

> TraceQuadrique := proc(a, b, c,vView, hView, xsection, ysection, zsection)
global GrapheQ;
try
   GrapheQ:=display(Quadrique(a, b, c, vView, hView),xsection,ysection,zsection):
catch:
   display(textplot3d([5,5,5,"Erreur dans les paramètres."]), axes=NONE, view=[-10..10, -10..10, -10..10], color=RED, titlefont = [TIMES, BOLD, 14]):
end try;
end proc:
 

----------------------------------------------------------  ENREGISTRER  AU FORMAT .GIF  ---------------------------------

> Enregistrer := proc()
global nomFichier,nouvGraphe,GrapheQ,GrapheX,GrapheY,GrapheZ;
if Maplets:-Tools:-Get('RB1'('value')) then nouvGraphe:=GrapheQ end if:
if Maplets:-Tools:-Get('RB2'('value')) then nouvGraphe:=GrapheX end if:
if Maplets:-Tools:-Get('RB3'('value')) then nouvGraphe:=GrapheY end if:
if Maplets:-Tools:-Get('RB4'('value')) then nouvGraphe:=GrapheZ end if:
if assigned( nomFichier ) then
  plotsetup( 'gif', 'plotoutput' = nomFichier );
  print( nouvGraphe );
  plotsetup( 'default' );
  nomFichier:='nomFichier';
else
  EnregSous();
end if;
end proc:

 
> EnregSous := proc()
global nomFichier;
local nnomFichier;
  try
    nnomFichier := Maplets:-Examples:-GetFile(
    'title' = "Enregistrer sous",
    'filefilter' = "gif",
    'approvecaption' = "Enregistrer"
     );
  catch:
    return;
  end try;
  if nnomFichier[-4..-1] = ".gif" then
    nomFichier := nnomFichier;
  else
    nomFichier := cat( nnomFichier, ".gif" );
  end if;
 Enregistrer();
end proc:
 

--------------------------------------------   MAPLET  QUADRIQUES  --------------------------------------------------------------

> MesOptions := [NORMAL, CONSTRAINED, NORMAL, XYZ, light1, PATCH, ELLIPSOIDE]:
nomFichier:='nomFichier': nouvGraphe:=NULL: GrapheQ:=NULL:
GrapheX:=NULL: GrapheY:=NULL: GrapheZ:=NULL:
 

 

> QuadriquesMaplet := Maplet(
 'onstartup' = RunWindow('FenPrincipale'),
 Font['F1']('family'="TIMES", 'bold'='false', 'italic'='false', size=12),
 Font['F2']('family'="TIMES", 'bold'='true', 'italic'='false', size=18),
 Font['F3']('family'="TIMES", 'bold'='true', 'italic'='false', size=12),
 ButtonGroup['Groupe0'](),  ButtonGroup['Groupe1'](),   ButtonGroup['Groupe2'](),
 ButtonGroup['Groupe3'](),  ButtonGroup['Groupe4'](),   ButtonGroup['Groupe5'](),
 ButtonGroup['Groupe6'](),  ButtonGroup['Groupe7'](),

 Window['FenPrincipale']('title' = "Quadriques", 'menubar'='Menu', 'layout' = 'PrincipalLayout' ),
 Window['FenInfo']('title' = "Information", 'layout' = 'InfoLayout', width=500, height=650),
 Window['FenDesc']('title' = "Description", 'layout' = 'DescLayout', width=400, height=500),
 Window['FenAideEnreg']('title' = "Aide sur Enregistrer", 'layout' = 'AideEnregLayout', width=400, height=500),
 Window['FenEnregistrer']('title' = "Enregistrer", 'layout' = 'EnregistrerLayout', width=400, height=250),
 Window['FenApropos']('title' = "A propos", 'layout' = 'AproposLayout', width=400, height=300),
 
 MenuBar['Menu'](
   Menu("Type",
      RadioButtonMenuItem['MenuType1']("Ellipsoïde",'value'=true,'group'='Groupe0','onclick'='maj'),
      RadioButtonMenuItem['MenuType2']("Hyperboloïde à une nappe",'group'='Groupe0','onclick'='maj'),
      RadioButtonMenuItem['MenuType3']("Hyperboloïde à deux nappes",'group'='Groupe0','onclick'='maj'),
      RadioButtonMenuItem['MenuType4']("Cône elliptique",'group'='Groupe0','onclick'='maj'),
      RadioButtonMenuItem['MenuType5']("Paraboloïde elliptique",'group'='Groupe0','onclick'='maj'),
      RadioButtonMenuItem['MenuType6']("Paraboloïde hyperbolique",'group'='Groupe0','onclick'='maj'),
      RadioButtonMenuItem['MenuType7']("Cylindre elliptique",'group'='Groupe0','onclick'='maj'),
      RadioButtonMenuItem['MenuType8']("Cylindre hyperbolique",'group'='Groupe0','onclick'='maj'),
      RadioButtonMenuItem['MenuType9']("Cylindre parabolique",'group'='Groupe0','onclick'='maj'),
      MenuSeparator(),
      MenuItem("Information sur cette quadrique", onclick='inform')                   
   ),
   Menu("Axes",
     RadioButtonMenuItem['MenuAxes1']("Normal",'value'=true,'group'='Groupe1','onclick'='maj'),
     RadioButtonMenuItem['MenuAxes2']("Boxed",'group'='Groupe1','onclick'='maj'),
     RadioButtonMenuItem['MenuAxes3']("Framed",'group'='Groupe1','onclick'='maj'),
     RadioButtonMenuItem['MenuAxes4']("None",'group'='Groupe1','onclick'='maj')
   ),
   Menu("Repère",  
     RadioButtonMenuItem['MenuRepere1']("Constrained",'value'=true,'group'='Groupe2','onclick'='maj') ,
     RadioButtonMenuItem['MenuRepere2']("Unconstrained",'group'='Groupe2','onclick'='maj')
   ),
   Menu("Projection",                                                                                            RadioButtonMenuItem['MenuProj1']("Normal",'value'=true,'group'='Groupe3','onclick'='maj'),
     RadioButtonMenuItem['MenuProj2']("Orthogonal",'group'='Groupe3','onclick'='maj'),
     RadioButtonMenuItem['MenuProj3']("Fisheye",'group'='Groupe3','onclick'='maj')
   ),
   Menu("Ombre",
     RadioButtonMenuItem['MenuOmbre1']("XYZ",'value'=true,'group'='Groupe4','onclick'='maj'),
     RadioButtonMenuItem['MenuOmbre2']("XY",'group'='Groupe4','onclick'='maj'),
     RadioButtonMenuItem['MenuOmbre3']("Z",'group'='Groupe4','onclick'='maj'),
     RadioButtonMenuItem['MenuOmbre4']("ZGRAYSCALE ",'group'='Groupe4','onclick'='maj'),
     RadioButtonMenuItem['MenuOmbre5']("ZHUE",'group'='Groupe4','onclick'='maj'),
     RadioButtonMenuItem['MenuOmbre6']("None",'group'='Groupe4','onclick'='maj')
   ),
   Menu("Lumière",
     RadioButtonMenuItem['MenuLumiere1']("Light1",'value'=true,'group'='Groupe5','onclick'='maj'),
     RadioButtonMenuItem['MenuLumiere2']("Light2", 'group'='Groupe5','onclick'='maj'),
     RadioButtonMenuItem['MenuLumiere3']("Light3",'group'='Groupe5','onclick'='maj'),
     RadioButtonMenuItem['MenuLumiere4']("Light4",'group'='Groupe5','onclick'='maj'),
     RadioButtonMenuItem['MenuLumiere5']("None",'group'='Groupe5','onclick'='maj')
   ),
   Menu("Style",
     RadioButtonMenuItem['MenuStyle1']("Patch",value=true,'group'='Groupe6','onclick'='maj'),
     RadioButtonMenuItem['MenuStyle2']("Hidden",'group'='Groupe6','onclick'='maj'),
     RadioButtonMenuItem['MenuStyle3']("WireFrame",'group'='Groupe6','onclick'='maj'),
     RadioButtonMenuItem['MenuStyle4']("Contour",'group'='Groupe6','onclick'='maj'),
     RadioButtonMenuItem['MenuStyle5']("PatchNoGrid",'group'='Groupe6','onclick'='maj'),
     RadioButtonMenuItem['MenuStyle6']("PatchContour",'group'='Groupe6','onclick'='maj'),
     RadioButtonMenuItem['MenuStyle7']("Line",'group'='Groupe6','onclick'='maj'),
     RadioButtonMenuItem['MenuStyle8']("Point",'group'='Groupe6','onclick'='maj')
   ),
   Menu("Aide",
     MenuItem("Description", onclick=RunWindow('FenDesc')),
     MenuItem("Enregistrer", onclick=RunWindow('FenAideEnreg')),
     MenuItem("A propos", onclick=RunWindow('FenApropos'))
   )
 ), # fin MenuBar['Menu']

Action['maj'](
 Evaluate('function' = "MiseAJourOptions"),
 Evaluate('PlotterQ'='TraceQuadrique(
 'a','b','c','phi','theta' ,  
 TraceQuadSectionX('boolX','valX','a','b','c','phi','theta'),
 TraceQuadSectionY('boolY','valY','a','b','c','phi','theta'),     
 TraceQuadSectionZ('boolZ','valZ','a','b','c','phi','theta')   
 )') ,
 Evaluate('PlotterX'='display(QuadSectionX('valX','a','b','c',0,90))') ,    
 Evaluate('PlotterY'='display(QuadSectionY('valY','a','b','c',90,90))'),
 Evaluate('PlotterZ'='display(QuadSectionZ('valZ','a','b','c',90,0))')
),
Action['inform'](
 Evaluate('function' = "MiseAJourInfo"),RunWindow('FenInfo')
),

BoxLayout['InfoLayout'](
 BoxColumn('border'=true, 'inset'=0, 'spacing'=0,
  Label['Titre']('font'='F2', 'caption'=ellipsoide:-nom() ),
  BoxRow('inset'=0, 'spacing'=0, 'border'=false,
    MathMLViewer['MMLV1']('height' = 70, 'width' = 200,'value'=MathML[Export](ellipsoide:-equation()))
  ),
  Label['Centre']( 'caption'=ellipsoide:-info()[1]),
  Label['Reglee']( 'caption'=ellipsoide:-info()[2]),
  Label['Rem'](),
  VerticalGlue(),
  Label('font'='F3', 'caption'="Paramétrage:"),
  BoxLayout(
   BoxColumn(  
     MathMLViewer['MMLV2']('height' = 70, 'width' = 200,'value'=MathML[Export](ellipsoide:-info()[3])),
     MathMLViewer['MMLV3']('height' = 70, 'width' = 200,'value'=MathML[Export](ellipsoide:-info()[4])),
     MathMLViewer['MMLV4']('height' = 70, 'width' = 200,'value'=MathML[Export](ellipsoide:-info()[5]))
   ),
   BoxColumn(
    MathMLViewer['MMLV5']('height' = 70, 'width' = 200,'value'=MathML[Export](ellipsoide:-info()[6])),
    MathMLViewer['MMLV6']('height' = 70, 'width' = 200,'value'=MathML[Export](ellipsoide:-info()[7]))
   )
  ),
  Label('font'='F3', 'caption'="Equation du plan tangent au point  M0 (x0, y0, z0):"),
  BoxRow('inset'=0, 'spacing'=0, 'border'=false,
    MathMLViewer['MMLV7']('height' = 70, 'width' = 200,'value'=MathML[Export](ellipsoide:-info()[8]))
  ),
  BoxColumn(VerticalGlue(),VerticalGlue()),
  Button("Fermer", CloseWindow('FenInfo'))
) ),

BoxLayout['DescLayout'](
BoxColumn('border'=true, 'inset'=0, 'spacing'=4,
    BoxRow('inset'=0, 'spacing'=0,
       TextBox('wrapped'=true, 'width'=80, 'height'=20, ck,  
        'editable'='false', 'value'=
       "Ce maplet donne la représentation graphique des 9 types de quadriques.\nPour cela, cliquer le bouton ""Dessiner"" ou changer les options graphiques à partir des différents menus:\nType, Axes, Repère, Projection, Ombre, Lumière, Style.\n\nCe maplet permet également de visualiser les sections de la quadrique choisie par des plans d'équation X=k, Y=k ou Z=k.\nPour cela, cliquer les options ""Section X"",""Section Y"", ""Section Z"" et saisissez la valeur de k.\n\nPour sauvegarder les graphiques créés au format .gif, cliquer le bouton ""Enregistrer"".\n\nPour obtenir des informations complémentaires sur la quadrique choisie, cliquer le bouton ""Infos"".\n\nPour quitter la fenêtre de Maplet, cliquer le bouton ""Fermer""."  
       )
    ),
    BoxRow('inset'=0, 'spacing'=0,
       Button("Fermer", CloseWindow('FenDesc') )
    )
  )
),

BoxLayout['EnregistrerLayout'](
BoxColumn(
 BoxColumn('border'=true, 'inset'=0, 'spacing'=0,
   [RadioButton['RB1']("Quadrique",'value'=true,'group'='Groupe7'),
   RadioButton['RB2']("Section X",'group'='Groupe7'),
   RadioButton['RB3']("Section Y",'group'='Groupe7'),
   RadioButton['RB4']("Section Z",'group'='Groupe7')],
   Button("Enregistrer", Evaluate('function' = "Enregistrer"))
 ),
 Button("Fermer", CloseWindow('FenEnregistrer'))
)
),

BoxLayout['AideEnregLayout'](
BoxColumn('border'=true, 'inset'=0, 'spacing'=4,
    BoxRow('inset'=0, 'spacing'=0,
       TextBox('wrapped'=true, 'width'=80, 'height'=18, ck,  
        'editable'='false', 'value'=
       "Pour enregistrer les graphiques créés au format .gif, cliquer le bouton ""Enregistrer"" de la fenêtre principale.\n\nEnsuite, sélectionner l'une des 4 options:\nQuadrique(sauvegarde du graphique de la quadrique avec éventuellement ses sections)\nSection X (sauvegarde du graphique de la section de la quadrique par le plan X=k)\nSection Y (sauvegarde du graphique de la section de la quadrique par le plan Y=k)\nSection Z (sauvegarde du graphique de la section de la quadrique par le plan Z=k)\n\nCliquer ensuite le bouton ""Enregistrer"".\nEntrer alors un nom de fichier pour le graphique sélectionné.\n\nPour quitter la fenêtre ""Enregistrer"", cliquer le bouton ""Fermer""."  
       )
    ),
    BoxRow('inset'=0, 'spacing'=0,
       Button("Fermer", CloseWindow('FenAideEnreg') )
    )
  )
),

BoxLayout['AproposLayout'](
 BoxColumn('border'=true, 'inset'=0, 'spacing'=0,
 Label(font=F2,"Quadriques"),
 Label("© Alain Le Stang - ""Apprendre Maple"" - 2004"),
 Button("Fermer", CloseWindow('FenApropos'))
)), # fin BoxLayout['AproposLayout']

BoxLayout['PrincipalLayout'](
   BoxColumn(
         BoxColumn('inset'=0, 'spacing'=0, 'border'=true, 'caption'="Paramètres",  
         BoxRow('inset'=0, 'spacing'=0,
            Label['aLabel'](" a: "),        Slider['a'](lower=1,filled=true,majorticks=1,orientation=horizontal,snapticks=false,upper=10,value=3,'onchange'='maj')
         ),
         BoxRow('inset'=0, 'spacing'=0,
            Label['bLabel'](" b: "),        Slider['b'](lower=1,filled=true,majorticks=1,orientation=horizontal,snapticks=false,upper=10,value=5,'onchange'='maj')
         ),
         BoxRow('inset'=0, 'spacing'=0,
            Label['cLabel'](" c: "),        Slider['c'](lower=1,filled=true,majorticks=1,orientation=horizontal,snapticks=false,upper=10,value=4,'onchange'='maj')
         )
        ),
   BoxRow('inset'=0, 'spacing'=0, 'border'=true, 'caption'="Equation",
           MathMLViewer['MMLV'](height = 70, width = 200)     
         ),

   BoxRow('inset'=0, 'spacing'=0,
         Button("  Dessiner  ", 'tooltip'="Dessiner", 'onclick'='maj'),
         Button(" Infos  ", 'tooltip'="Informations", 'onclick'='inform')
       ),
       BoxRow('inset'=0, 'spacing'=0,
         Button("Enregistrer", 'tooltip'="Enregistrer", RunWindow('FenEnregistrer') ),
         Button("Fermer", 'tooltip'="Fermer", Shutdown())
       )
   ),

   BoxRow('inset'=0, 'spacing'=0,
       BoxColumn('inset'=0, 'spacing'=0,  'border'=true, 'caption'="Quadrique",
       BoxRow('inset'=0, 'spacing'=0,
         Plotter['PlotterQ']()
       ),
      BoxColumn('inset'=0, 'spacing'=0,  'border'=true, 'caption'="Orientation: theta, phi", Slider['theta'](lower=0,filled=true,majorticks=30,minorticks=10,orientation=horizontal,snapticks=false,upper=360,value=45,'onchange'='maj'),
Slider['phi'](lower=0,filled=true,majorticks=30,minorticks=10,orientation=horizontal,snapticks=false,upper=360,value=60,'onchange'='maj')
     ),
     BoxRow('inset'=0, 'spacing'=0,
        [CheckBox['boolX'](caption="Section X", 'onchange'='maj')],
        [CheckBox['boolY'](caption="Section Y", 'onchange'='maj')],
        [CheckBox['boolZ'](caption="Section Z", 'onchange'='maj')])
     ),
     BoxColumn('inset'=0, 'spacing'=0,  'border'=true, 'caption'="Sections",
        Plotter['PlotterX'](width=150, height=150),  
        BoxRow('inset'=0, 'spacing'=0, 'border'=true,
           Label("Section   X = "),  
           TextField['valX'](3,'value'=2)
        ),  
   
        Plotter['PlotterY'](width=150, height=150),  
        BoxRow('inset'=0, 'spacing'=0, 'border'=true,
           Label("Section   Y = "),  
           TextField['valY'](3,'value'=2)
        ),  
   
        Plotter['PlotterZ'](width=150, height=150),  
        BoxRow('inset'=0, 'spacing'=0, 'border'=true,
           Label("Section   Z = "),  
           TextField['valZ'](3,'value'=2)
        )  
     )  
) # fin BoxLayout['PrincipalLayout']
)
):

 

> Maplets[Display] (QuadriquesMaplet);
   




 

 

haut de cette page


©  - Alain Le Stang - Navigation optimisée pour une résolution 1024 x 768.