Surface bizarre

Tout ce qui concerne l'utilisation ou l'installation d'Asymptote.

Modérateur: gdm_asy

Règles du forum
Merci d'éviter le style SMS dans vos messages et de penser à utiliser la fonction Recherche avant de poster un message. Pour joindre des fichiers à vos messages, consulter ce sujet.
> Penser à utiliser les balises Code pour poster du code.

Surface bizarre

Messagepar guiguiche » Lundi 10 Janvier 2011, 17:06

Soit la représentation graphique de $(x,y)\mapsto\sqrt{4-(x^2+y^2)}$. Pourquoi le dessin ci-dessous est-il bizarre ?

Code: Tout sélectionner
import graph3 ;
size(10cm);
currentprojection=orthographic((15,10,5),up=Z);
limits(O,3X+3Y+Z);

pair mini=(-2,-2) ;               // coordonnées minimales dans le plan de départ
pair maxi=(2,2) ;                 // coordonnées maximales dans le plan de départ
pair A=(0.4,-0.7) ;              // point dans le plan de départ en lequel on déterminer le plan tangent
real f(pair pM) {                 // la fonction à représenter
   real normeOM=pM.x^2+pM.y^2 ;
   if (normeOM<4) return sqrt(4-normeOM) ;
      else return 0 ;
}

// Calcul du vecteur gradient et du plan tangent
real dt=0.00000000001 ;
pair Ux=(1,0) ;
real dfdx=(f(A+dt*Ux)-f(A))/dt ;
pair Uy=(0,1) ;
real dfdy=(f(A+dt*Uy)-f(A))/dt ;
real g(pair M) {                 // la fonction tangente en A
   return f(A)+dfdx*(M.x-A.x)+dfdy*(M.y-A.y) ;
}

// Ce qu'il faut représenter
surface p0=surface(plane((maxi.x-mini.x,0,0),(0,maxi.y-mini.y,0),(mini.x,mini.y,0))) ;  // le plan de départ
surface s=surface(f,mini,maxi,50,50,Spline) ;  // la surface représentation de la fonction f
surface t=surface(g,A+0.5*mini,A+0.5*maxi,36,36,Spline) ;  // le plan tangent à s en A
triple pA=(A.x,A.y,0) ;          // le point A dans le plan p0
triple pAA=(A.x,A.y,f(A)) ;      // le point "image" de A
triple gradfA=(dfdx,dfdy,0) ;    // le vecteur gradient dans le plan p0

// Représentation graphique
xaxis3(Label("$x$",1),Arrow3);
yaxis3(Label("$y$",1),Arrow3);
zaxis3(Label("$z$",1),Arrow3);
draw(p0,paleblue+opacity(.5));                 // le plan p0 "des coordonnées"
draw(t,palered+opacity(.8));                   // le plan tangent
draw(s,green);                                 // la surface représentation de f
dot("A",pA,2bp+blue) ;                         // le point A dans le plan p0
draw(pA--pA+gradfA,red,Arrow3()) ;             // le vecteur gradient en A dans le plan p0
dot(pAA,2bp+red) ;                             // le point "image" de A
draw((pA.x,0,0)--pA,blue+dashed) ;             // la coordonnée x de A
draw((0,pA.y,0)--pA,blue+dashed) ;             // la coordonnée y de A
draw(pA--pAA,red+dashed) ;                     // on relie A et son "image"


[error: could not load module '/mnt/src/b1acf3079d28c5bd6c43728b5d60b876.asy']

Code: Tout sélectionner
import graph3 ;
size(10cm);
currentprojection=orthographic((15,10,5),up=Z);
limits(O,3X+3Y+Z);

pair mini=(-2,-2) ; // coordonnées minimales dans le plan de départ
pair maxi=(2,2) ; // coordonnées maximales dans le plan de départ
pair A=(0.4,-0.7) ; // point dans le plan de départ en lequel on déterminer le plan tangent
real f(pair pM) { // la fonction à représenter
real normeOM=pM.x^2+pM.y^2 ;
if (normeOM<4) return sqrt(4-normeOM) ;
else return 0 ;
}

// Calcul du vecteur gradient et du plan tangent
real dt=0.00000000001 ;
pair Ux=(1,0) ;
real dfdx=(f(A+dt*Ux)-f(A))/dt ;
pair Uy=(0,1) ;
real dfdy=(f(A+dt*Uy)-f(A))/dt ;
real g(pair M) { // la fonction tangente en A
return f(A)+dfdx*(M.x-A.x)+dfdy*(M.y-A.y) ;
}

// Ce qu'il faut représenter
surface p0=surface(plane((maxi.x-mini.x,0,0),(0,maxi.y-mini.y,0),(mini.x,mini.y,0))) ; // le plan de départ
surface s=surface(f,mini,maxi,50,50,Spline) ; // la surface représentation de la fonction f
surface t=surface(g,A+0.5*mini,A+0.5*maxi,36,36,Spline) ; // le plan tangent à s en A
triple pA=(A.x,A.y,0) ; // le point A dans le plan p0
triple pAA=(A.x,A.y,f(A)) ; // le point "image" de A
triple gradfA=(dfdx,dfdy,0) ; // le vecteur gradient dans le plan p0

// Représentation graphique
xaxis3(Label("$x$",1),Arrow3);
yaxis3(Label("$y$",1),Arrow3);
zaxis3(Label("$z$",1),Arrow3);
draw(p0,paleblue+opacity(.5)); // le plan p0 "des coordonnées"
draw(t,palered+opacity(.<!-- s8) --><img src="{SMILIES_PATH}/icon_cool.gif" alt="8)" title="Cool" /><!-- s8) -->); // le plan tangent
draw(s,green); // la surface représentation de f
dot("A",pA,2bp+blue) ; // le point A dans le plan p0
draw(pA--pA+gradfA,red,Arrow3()) ; // le vecteur gradient en A dans le plan p0
dot(pAA,2bp+red) ; // le point "image" de A
draw((pA.x,0,0)--pA,blue+dashed) ; // la coordonnée x de A
draw((0,pA.y,0)--pA,blue+dashed) ; // la coordonnée y de A
draw(pA--pAA,red+dashed) ; // on relie A et son "image"


Edit : pourquoi l'image ne s'affiche-t-elle pas ?
Pas d'aide par MP : les questions sont publiques, les réponses aussi.
Tu as apprécié l'aide qui t'a été fournie ? Alors n'hésite pas à rendre la pareille à quelqu'un d'autre.
Un peu d'autopromotion.
guiguiche
Modérateur
 
Messages: 8071
Inscription: Vendredi 06 Janvier 2006, 15:32
Localisation: Le Mans
Statut actuel: Actif et salarié | Enseignant

Publicité

Re: surface bizarre

Messagepar projetmbc » Lundi 10 Janvier 2011, 17:16

guiguiche a écrit:pourquoi l'image ne s'affiche-t-elle pas ?

Parce que ton image est trop bizarre... :lol: Désolé, c'était tentant.
projetmbc
Péta-utilisateur
 
Messages: 1897
Inscription: Samedi 29 Décembre 2007, 00:58
Statut actuel: Actif et salarié | Enseignant

Re: surface bizarre

Messagepar GMaths » Lundi 10 Janvier 2011, 17:48

guiguiche a écrit:Soit la représentation graphique de $(x,y)\mapsto\sqrt{4-(x^2+y^2)}$. Pourquoi le dessin ci-dessous est-il bizarre ?

Edit : pourquoi l'image ne s'affiche-t-elle pas ?


Le problème, c'est que tu demandes de trouver une surface de bézier qui représente le tout : cela se passe forcément mal au niveau de la jonction avec la partie plane.

  • Sans changer de façon de faire :
    Code: Tout sélectionner
    s=surface(f,mini,maxi,200,200,monotonic)

    va améliorer les choses.

    Pour le plan, n=36 est de trop... mais pour s, ce n'est pas assez compte tenu des discontinuités.
  • Autre idée, changer de paramétrage !
  • Troisième idée : penser à utiliser unithemisphere.
GMaths
Exa-utilisateur
 
Messages: 2031
Inscription: Lundi 01 Octobre 2007, 09:20
Statut actuel: Actif et salarié | Enseignant

Re: Surface bizarre

Messagepar OG » Lundi 10 Janvier 2011, 19:09

Hello

Je vais dans le sens de Gaëtan, vous essayez (idem tangentes et dérivées partielles) de tracer
une surface non continue ou juste Lipschitz avec des surfaces $C^1$ voire $C^2$, il ne faut pas s'étonner
d'avoir des effets indésirables.

Ici on doit pouvoir tricher en faisant deux surfaces...

O.G.
OG
Modérateur
 
Messages: 2285
Inscription: Lundi 12 Mars 2007, 11:20
Localisation: Rouen
Statut actuel: Actif et salarié | Maître de conférence

Re: Surface bizarre

Messagepar GMaths » Lundi 10 Janvier 2011, 19:28

La surface en exploitant unithemisphere :

ed16b1398a16dd884ca0cf1ad7a92b3e.png

Code: Tout sélectionner
import graph3 ;
size(10cm);
currentprojection=orthographic((15,10,5),up=Z);
limits(O,3X+3Y+Z);
draw(surface(reverse(shift(-2.5,-2.5,0)*scale3(5)*unitsquare3)
^^scale3(2)*unitcircle3,
planar=true),green);
draw(scale3(2)*unithemisphere,green);
xaxis3(Label("$x$",1),Arrow3);
yaxis3(Label("$y$",1),Arrow3);
zaxis3(Label("$z$",1),Arrow3);


Le plan tangent ne serait pas un problème à ajouter.

A noter que je n'ai pas triché : ce n'est pas un simple carré en dessous.
GMaths
Exa-utilisateur
 
Messages: 2031
Inscription: Lundi 01 Octobre 2007, 09:20
Statut actuel: Actif et salarié | Enseignant

Re: surface bizarre

Messagepar maurice » Lundi 10 Janvier 2011, 20:29

Bonsoir,

GMaths a écrit:
  • Sans changer de façon de faire :
    Code: Tout sélectionner
    s=surface(f,mini,maxi,200,200,monotonic)

    va améliorer les choses.


Justement, dans la doc officielle, j'ai vu les différentes types d'interpolation ...

$\bullet$ Spline qui correspondrait à des interpolations cubiques par des courbes de Béziers.
$\bullet$ notaknot, natural, periodic, clamped(real slopea, real slopeb) ou monotonic qui correspondraient à des options d’interpolation (cubique) de l’Hermite.

Mais comme je n'y connais pas grand chose en interpolation et en analyse numérique, y-a-t-il quelqu'un qui pourrait m'indiquer grosso modo les différences en options et dans quels cas il faut mieux utiliser l'une que l'autre.

Merci

Maurice
Asymptote :
----> Démarrage rapide : http://cgmaths.fr/Atelier/Asymptote/Asymptote.html
----> Documentation 3D : http://www.mathco.tuxfamily.org et si ça ne marche pas, essayez la version pdf
maurice
Méga-utilisateur
 
Messages: 399
Inscription: Jeudi 25 Mars 2010, 13:49
Statut actuel: Actif et salarié | Enseignant

Re: Surface bizarre

Messagepar guiguiche » Lundi 10 Janvier 2011, 20:40

Ce qui me surprend, c'est qu'avec Maxima (donc gnuplot) et K3DSurf, sans donner la moindre indication autre que la fonction et les bornes, on obtient tout de suite un graphique satisfaisant, ce qui n'est pas le cas ici (comme en plus, je n'y connais en courbes de Bézier ...)
Pas d'aide par MP : les questions sont publiques, les réponses aussi.
Tu as apprécié l'aide qui t'a été fournie ? Alors n'hésite pas à rendre la pareille à quelqu'un d'autre.
Un peu d'autopromotion.
guiguiche
Modérateur
 
Messages: 8071
Inscription: Vendredi 06 Janvier 2006, 15:32
Localisation: Le Mans
Statut actuel: Actif et salarié | Enseignant

Re: Surface bizarre

Messagepar guiguiche » Lundi 10 Janvier 2011, 20:42

OG a écrit:vous essayez [...]

Tu me vouvoies maintenant :lol:
Pas d'aide par MP : les questions sont publiques, les réponses aussi.
Tu as apprécié l'aide qui t'a été fournie ? Alors n'hésite pas à rendre la pareille à quelqu'un d'autre.
Un peu d'autopromotion.
guiguiche
Modérateur
 
Messages: 8071
Inscription: Vendredi 06 Janvier 2006, 15:32
Localisation: Le Mans
Statut actuel: Actif et salarié | Enseignant

Re: Surface bizarre

Messagepar OG » Lundi 10 Janvier 2011, 21:20

guiguiche a écrit:
OG a écrit:vous essayez [...]

Tu me vouvoies maintenant :lol:

Ça fait partie de mes résolutions pour 2011 !

As-tu les codes pour Maxima et KD3Surf ?

O.G.
OG
Modérateur
 
Messages: 2285
Inscription: Lundi 12 Mars 2007, 11:20
Localisation: Rouen
Statut actuel: Actif et salarié | Maître de conférence

Re: Surface bizarre

Messagepar oleanet » Lundi 10 Janvier 2011, 21:41

Bonjour,

Pourquoi ne pas utiliser un paramétrage sphérique? C'est ce qui va le mieux ici.

Image
oleanet
Méga-utilisateur
 
Messages: 258
Inscription: Dimanche 24 Décembre 2006, 15:17

Re: Surface bizarre

Messagepar guiguiche » Lundi 10 Janvier 2011, 21:50

Je m'étais naïvement dit qu'un unique fichier dans lequel on modifie seulement la fonction et le point en lequel on effectue l'étude était une bonne idée dans un premier temps.
Pas d'aide par MP : les questions sont publiques, les réponses aussi.
Tu as apprécié l'aide qui t'a été fournie ? Alors n'hésite pas à rendre la pareille à quelqu'un d'autre.
Un peu d'autopromotion.
guiguiche
Modérateur
 
Messages: 8071
Inscription: Vendredi 06 Janvier 2006, 15:32
Localisation: Le Mans
Statut actuel: Actif et salarié | Enseignant

Re: Surface bizarre

Messagepar guiguiche » Lundi 10 Janvier 2011, 21:56

OG a écrit:As-tu les codes pour Maxima et KD3Surf ?


Code: Tout sélectionner
plot3d(sqrt(4-x^2-y^2), [x,-2,2], [y,-2,2], [plot_format,gnuplot])

(c'est à dire avec [grid,30,30]) donne quelque chose de moins mauvais que Asymptote (moins esthétique aussi) car sans les éléments de surface sous le plan xOy.

Code: Tout sélectionner
plot3d(sqrt(4-x^2-y^2), [x,-2,2], [y,-2,2], [plot_format,gnuplot], [grid,100,100])

est très bon.
Pas d'aide par MP : les questions sont publiques, les réponses aussi.
Tu as apprécié l'aide qui t'a été fournie ? Alors n'hésite pas à rendre la pareille à quelqu'un d'autre.
Un peu d'autopromotion.
guiguiche
Modérateur
 
Messages: 8071
Inscription: Vendredi 06 Janvier 2006, 15:32
Localisation: Le Mans
Statut actuel: Actif et salarié | Enseignant

Re: Surface bizarre

Messagepar OG » Lundi 10 Janvier 2011, 22:06

oleanet a écrit:Bonjour,

Pourquoi ne pas utiliser un paramétrage sphérique? C'est ce qui va le mieux ici.



Oui tu as raison, mais avec la base carrée...

4c58508bf8199d92589d008fc1714151.png

Code: Tout sélectionner
import graph3 ;
size(10cm);
currentprojection=orthographic((15,10,5),up=Z);
limits(O,3X+3Y+Z);
pair m1=(0,0);
pair m2=(2pi,pi/2);
triple ff(pair pM) { // la fonction à représenter
// real normeOM=pM.x^2+pM.y^2 ;
// if (normeOM<4) return sqrt(4-normeOM) ;
// else return 0 ;
return 2*(sin(pM.y)*cos(pM.x),sin(pM.y)*sin(pM.x),cos(pM.y));
//2-2*sin(pM.x)*(cos(pM.y)+sin(pM.y)));
}
surface s=surface(ff,m1,m2,20,20,Spline);
xaxis3(Label("$x$",1),Arrow3);
yaxis3(Label("$y$",1),Arrow3);
zaxis3(Label("$z$",1),Arrow3);
draw(s,green);


O.G.
OG
Modérateur
 
Messages: 2285
Inscription: Lundi 12 Mars 2007, 11:20
Localisation: Rouen
Statut actuel: Actif et salarié | Maître de conférence

Re: Surface bizarre

Messagepar GMaths » Lundi 10 Janvier 2011, 22:19

Au pays des méthodes qui ne fonctionnent pas pour une autre surface... le plus simple est pour ce cas, j'insiste, ceci :

Code: Tout sélectionner
draw(scale3(2)*unithemisphere,green);
GMaths
Exa-utilisateur
 
Messages: 2031
Inscription: Lundi 01 Octobre 2007, 09:20
Statut actuel: Actif et salarié | Enseignant

Re: Surface bizarre

Messagepar GMaths » Lundi 10 Janvier 2011, 22:24

GMaths a écrit:Au pays des méthodes qui ne fonctionnent pas pour une autre surface... le plus simple est pour ce cas, j'insiste, ceci :

Code: Tout sélectionner
draw(scale3(2)*unithemisphere,green);


Et pour d'autres surfaces qui auraient un axe de révolution, rappelons qu'il y a des routines pour générer des surfaces en faisant tourner un path3.
GMaths
Exa-utilisateur
 
Messages: 2031
Inscription: Lundi 01 Octobre 2007, 09:20
Statut actuel: Actif et salarié | Enseignant

Re: Surface bizarre

Messagepar OG » Lundi 10 Janvier 2011, 22:24

GMaths a écrit:Quitte à adopter une méthode, qui ne fonctionnera pas pour une autre surface... le plus simple est, j'insiste, ceci :

Oui. C'est celle qui mange le moins de mémoire.

D'une façon générale il faut faire attention au paramétrage, à la régularité, etc et
il peut toujours y avoir des effets indésirables avec les surfaces bien lisses (Spline...).
La méthode implémentée est naïve et supportera mal de fortes variations.

O.G.
OG
Modérateur
 
Messages: 2285
Inscription: Lundi 12 Mars 2007, 11:20
Localisation: Rouen
Statut actuel: Actif et salarié | Maître de conférence

Re: Surface bizarre

Messagepar guiguiche » Lundi 10 Janvier 2011, 22:39

Je découvre les joies de ces logiciels et les problèmes induits.
Pas d'aide par MP : les questions sont publiques, les réponses aussi.
Tu as apprécié l'aide qui t'a été fournie ? Alors n'hésite pas à rendre la pareille à quelqu'un d'autre.
Un peu d'autopromotion.
guiguiche
Modérateur
 
Messages: 8071
Inscription: Vendredi 06 Janvier 2006, 15:32
Localisation: Le Mans
Statut actuel: Actif et salarié | Enseignant

Re: Surface bizarre

Messagepar OG » Lundi 10 Janvier 2011, 22:44

guiguiche a écrit:Je découvre les joies de ces logiciels et les problèmes induits.

Ce n'est pas qu'une question logiciel, c'est aussi une question mathématique.

En enlevant spline, tu as des surfaces par facette ou fils de fer comme avec maxima via gnuplot.

O.G.
OG
Modérateur
 
Messages: 2285
Inscription: Lundi 12 Mars 2007, 11:20
Localisation: Rouen
Statut actuel: Actif et salarié | Maître de conférence

Re: Surface bizarre

Messagepar guiguiche » Lundi 10 Janvier 2011, 23:05

Oui, j'avais compris, j'aurais dû dire outils à la place de logiciels.
Pas d'aide par MP : les questions sont publiques, les réponses aussi.
Tu as apprécié l'aide qui t'a été fournie ? Alors n'hésite pas à rendre la pareille à quelqu'un d'autre.
Un peu d'autopromotion.
guiguiche
Modérateur
 
Messages: 8071
Inscription: Vendredi 06 Janvier 2006, 15:32
Localisation: Le Mans
Statut actuel: Actif et salarié | Enseignant

Re: Surface bizarre

Messagepar maurice » Lundi 10 Janvier 2011, 23:07

OG a écrit:
guiguiche a écrit:Je découvre les joies de ces logiciels et les problèmes induits.

Ce n'est pas qu'une question logiciel, c'est aussi une question mathématique.

En enlevant spline, tu as des surfaces par facette ou fils de fer comme avec maxima via gnuplot.

O.G.


J'en reviens à ma question de tout à l'heure (ouvrir un autre fil ?) ...
Quelle option d'interpolation (spline, notaknot, natural, periodic, clamped(real slopea, real slopeb) ou monotonic) ? dans quel cas ?
Spline est la plus gourmande ?
Utiliser monotonic ici pourquoi ? ou dans le fil précédent ?

merci d'éclairer mon esprit inculte en analyse numérique !
maurice
Asymptote :
----> Démarrage rapide : http://cgmaths.fr/Atelier/Asymptote/Asymptote.html
----> Documentation 3D : http://www.mathco.tuxfamily.org et si ça ne marche pas, essayez la version pdf
maurice
Méga-utilisateur
 
Messages: 399
Inscription: Jeudi 25 Mars 2010, 13:49
Statut actuel: Actif et salarié | Enseignant

Suivante

Retourner vers Asymptote

 


  • Articles en relation
    Réponses
    Vus
    Dernier message

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité