découpage d'une surface avec scilab

Bonjour

Quelqu'un sait-il comment ne dessiner qu'une partie d'une surface avec scilab ?
Par exemple je voudrais tracer la surface $z=x^2+y^2$ avec $x\geq 1$, $y\geq 1$ et $3x+4y\leq 12$ ou encore $z=xy$ sur le disque unité.
J'ai lu les documentations mais je n'ai rien trouvé dessus.
Merci

Réponses

  • Il faut traiter ta surface comme une surface paramétrée : d'abord paramétrer le domaine qui t'intéresse puis passer par la manipulation indiquée au point 2.2 de ce document (par exemple).
  • Merci de votre réponse rapide.

    Je bloque toujours pour le premier exemple. Tout ce que j'ai trouvé pour l'instant est :
    function [x,y,z]=parabolor(u,v)
      x=u
      y=v
      z=((u-1)^2+(v-2)^2-4).*bool2s(2*u+3*v<=6)
      endfunction
    
    u=[0:0.1:3];
      v=[0:0.1:2];
      [x,y,z]=eval3dp(parabolor,u,v);
      plot3d(x,y,z)
      a=gca();//"axes" courant
      p=a.children(1);//Plot3d
      p.color_mode=10;//dessus bleu
    

    Le résultat est plutôt moche.

    J'aurais aimé pouvoir écrire :
    v=[0:0.1:2-u]
    

    mais scilab n'est pas d'accord.

    J'ai trouvé un peu mieux avec :
    deff('[z]=f(x,y)',['z=(x-1)^2+(y-2)^2-4']);
    deff('[z]=b(x,y)',['z=bool2s(2*x+3*y<=6)']);
    
    x=[0:0.1:3];
      y=[0:0.1:2];
      z=eval3d(f,x,y)
      bo=eval3d(b,x,y)
      [xx,yy,zz]=genfac3d(x,y,z,bo);
      plot3d(xx,yy,zz)
      a=gca();//"axes" courant
      p=a.children(1);//Plot3d
      p.color_mode=10;//dessus bleu
    

    Mais le dernier coté est toujours moche.

    Y a-t-il un moyen de le "lisser" ?

    Pour le deuxième exemple j'ai trouvé facilement :
    function [x,y,z]=paraboloh(rho,theta)
      x=rho.*cos(theta)
      y=rho.*sin(theta)
      z=(rho^2).*sin(2*theta)/2
      endfunction
    
    rho=[0:0.1:1];
      theta=[0:0.1:2*3.15];
      [x,y,z]=eval3dp(paraboloh,rho,theta);
      plot3d(x,y,z)
      a=gca();//"axes" courant
      p=a.children(1);//Plot3d
      p.color_mode=10;//dessus bleu
    

    Merci d'avance
  • Une toute petite modification de ton premier code suffit. Comme je l'ai dit, il faut paramétrer la surface, donc d'abord le triangle où sont x et y :
    function [x,y,z]=parabolor(u,v)
      x=5*u/3
      y=5*v.*(1-u)/4
      z=x.^2+y.^2
      endfunction
    
    u=linspace(0,1,50);
      v=u;
      [x,y,z]=eval3dp(parabolor,u,v);
      plot3d(x,y,z)
      a=gca();//"axes" courant
      p=a.children(1);//Plot3d
      p.color_mode=10;//dessus bleu
    

    Ici, c'est l'exemple de ton premier post, pas du second
  • Merci.

    C'était pourtant facile.
Connectez-vous ou Inscrivez-vous pour répondre.