Petit (mais alors tout petit) défi

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.

Petit (mais alors tout petit) défi

Messagepar rebouxo » Vendredi 01 Juillet 2011, 21:08

Voilà je voudrais faire la figure du solide de révolution du BAC STI GM option A et F. C'est un solide de révolution avec la fonction $f(x) = -x*ln(x)+2*x$ entre $1$ et $10$., Il faudra des plans de coupe en $x = 1$, $x=10$ et $x=4.5$.

Donc je suis allé voir la sUUpEErbe doc de Maurice. Il y a bien des solides de révolution, mais pas définis par une fonction. Donc, que faut-il modifier dans le code suivant, pour avoir mon joli solide ?

Code: Tout sélectionner
   import solids;
        currentprojection = perspective(10,100,25);
        unitsize(2.5cm);
        triple pO=(0,0,0);
         // je suppose que c'est là
        path3 gene=(0,0.5,-2)..(0,0.5,-1)..(0,1,-0.5)..(0,1,0.5)..(0,0.5,1)..(0,0.5,2);
        // Question subsidiaire, pourquoi cette redondance de revolution ?
        // Vous faites parti d'un complot de l'ultra gauche ?
        revolution sur=revolution(pO,gene,Y,0,360);
        draw(surface(sur),yellow);


Olivier
A line is a point that went for a walk. Paul Klee
Par solidarité, pas de MP
rebouxo
Modérateur
 
Messages: 6927
Inscription: Mercredi 15 Février 2006, 13:18
Localisation: le havre
Statut actuel: Actif et salarié | Enseignant

Publicité

Re: petit (mais alors tout petit défi)

Messagepar chellier » Vendredi 01 Juillet 2011, 21:48

C'est quelque chose comme ça ? :

verre.png
verre.png (29.61 Kio) Vu 1257 fois

Code: Tout sélectionner
import solids;
size(10cm);

currentprojection=perspective(-5,12,3);
revolution solrev=revolution(new real(real x) {return -x*log(x)+2*x;},
                                  1,10,70,operator..,X);
draw(surface(solrev),blue,render(compression=Low,merge=true));


Christophe
chellier
Modérateur
 
Messages: 355
Inscription: Samedi 25 Juillet 2009, 11:25
Localisation: Le Creusot
Statut actuel: Actif et salarié | Enseignant

Re: Petit (mais alors tout petit) défi

Messagepar GMaths » Samedi 02 Juillet 2011, 01:31

Pas si petit que cela le défi pour obtenir la section... correspondante à h/2 (si j'ai bien lu le sujet... donc pour la valeur centrale de l'intervalle [1;7] qui n'est pas 4,5).


Code: Tout sélectionner
import solids;
import gm;
size(10cm);

currentprojection=cavaliereY;

real f(real x) {return -x*log(x)+2*x;}

revolution solrev=revolution(f,1,7,60,operator..,X);

draw(surface(solrev),paleblue+opacity(.7),nolight); // ,render(compression=Low,merge=true)

skeleton s;
solrev.transverse(s,reltime(solrev.g,0));
solrev.transverse(s,reltime(solrev.g,1));

// à revoir... car la valeur .47 est approximative.
solrev.transverse(s,reltime(solrev.g,.47));

draw(s.transverse.back,linetype("8 8"));
draw(s.transverse.front);

xaxis3("$x$",xmin=0,xmax=7.9,OutTicks(NoZero,Step=1),Arrow3);
zaxis3("$z$",Arrow3);


2011-07-02_024142.png


Il faut revoir la façon de tracer la section intermédiaire correspondant à x=4... et ajouter les cotes... mais là je vais me coucher.
GMaths
Exa-utilisateur
 
Messages: 2031
Inscription: Lundi 01 Octobre 2007, 09:20
Statut actuel: Actif et salarié | Enseignant

Re: Petit (mais alors tout petit) défi

Messagepar GMaths » Samedi 02 Juillet 2011, 09:32

GMaths a écrit:Pas si petit que cela le défi pour obtenir la section... correspondante à h/2 (si j'ai bien lu le sujet... donc pour la valeur centrale de l'intervalle [1;7] qui n'est pas 4,5).

Code: Tout sélectionner
// à revoir... car la valeur .47 est approximative.
solrev.transverse(s,reltime(solrev.g,.47));


Quoique... je suis en train de me demander si

Code: Tout sélectionner
solrev.transverse(s,reltime(solrev.g,.5));


ne donne pas ce qui est souhaité.

Sur le moment, je pensais que c'était .5=50% de la longueur du path3 générateur de la surface... qui ne correspondrait pas à la moyenne des abscisses extrêmes mais moment de doute. Je dois vérifier.
GMaths
Exa-utilisateur
 
Messages: 2031
Inscription: Lundi 01 Octobre 2007, 09:20
Statut actuel: Actif et salarié | Enseignant

Re: Petit (mais alors tout petit) défi

Messagepar GMaths » Samedi 02 Juillet 2011, 09:46

GMaths a écrit:Quoique... je suis en train de me demander si

Code: Tout sélectionner
solrev.transverse(s,reltime(solrev.g,.5));


ne donne pas ce qui est souhaité.

Sur le moment, je pensais que c'était .5=50% de la longueur du path3 générateur de la surface... qui ne correspondrait pas à la moyenne des abscisses extrêmes mais moment de doute. Je dois vérifier.


La réponse est dans la comparaison de cette figure http://marris.org/asymptote/Solides/index.html#fig_ab07_271008_sphere et celle qui suit la suivante.
Dans un cas, les cercles sont régulièrement espacés en fonction des distances sur le demi-cercle générateur... et dans l'autre en fonction des valeurs des cotes.

Et il est à noter la différence avec un exemple 2D où les points définissant le path sont espacés en fonction des abscisses (j'ai demandé n=6 pour que cela correspondent aux entiers dans l'exemple suivant) :

b7b503ad6677bcf95355f5df7becaa13.png

Code: Tout sélectionner
import graph;
size(400);

real f(real x) {return -x*log(x)+2*x;}
path c=graph(f,1,7,operator=..,n=6);

draw(c);
dot(c);

real a=4.0;
real t=intersect(c,(a,min(c).y)--(a,max(c).y))[0];
draw((a,0)--point(c,t),linetype("4 4"));

dot(format("time du point = %f",t),point(c,t),NE);

DefaultHead=HookHead;
xaxis("$x$",xmin=0,xmax=7.9,Ticks(NoZero,Step=1,Size=1),Arrow());
yaxis("$x$",Arrow());


Donc attention à cette différence du reltime(...,.5).
Dernière édition par GMaths le Samedi 02 Juillet 2011, 09:53, édité 1 fois.
GMaths
Exa-utilisateur
 
Messages: 2031
Inscription: Lundi 01 Octobre 2007, 09:20
Statut actuel: Actif et salarié | Enseignant

Re: Petit (mais alors tout petit) défi

Messagepar projetmbc » Samedi 02 Juillet 2011, 09:49

Bonjour,
si au moins le concepteur du sujet avait fait cet effort. Du grand n'importe quoi ce problème de STI GM.
projetmbc
Péta-utilisateur
 
Messages: 1895
Inscription: Samedi 29 Décembre 2007, 00:58
Statut actuel: Actif et salarié | Enseignant

Re: Petit (mais alors tout petit) défi

Messagepar GMaths » Samedi 02 Juillet 2011, 09:55

projetmbc a écrit:si au moins le concepteur du sujet avait fait cet effort.

???
Tu veux dire : l'effort d'une figure qui correspondent mieux à la forme réelle ???
GMaths
Exa-utilisateur
 
Messages: 2031
Inscription: Lundi 01 Octobre 2007, 09:20
Statut actuel: Actif et salarié | Enseignant

Re: Petit (mais alors tout petit) défi

Messagepar GMaths » Samedi 02 Juillet 2011, 10:26

GMaths a écrit:Donc attention à cette différence du reltime(...,.5).


Un exemple qui montre la différence (j'ai demandé n=6 pour que les points de la génératrice correspondent aussi aux entiers) :

Code: Tout sélectionner
import solids;
import gm;
size(10cm);

currentprojection=cavaliereY;

real f(real x) {return -x*log(x)+2*x;}

revolution solrev=revolution(f,1,7,6,operator..,X);

draw(surface(solrev),paleblue+opacity(.7),nolight); // ,render(compression=Low,merge=true)

skeleton s;
solrev.transverse(s,reltime(solrev.g,0));
solrev.transverse(s,reltime(solrev.g,1));

solrev.transverse(s,reltime(solrev.g,.5));

draw(s.transverse.back,linetype("8 8"));
draw(s.transverse.front);
draw(solrev.silhouette(),.6bp+blue);

xaxis3("$x$",xmin=0,xmax=7.9,OutTicks(NoZero,Step=1),Arrow3);
zaxis3("$z$",Arrow3);

draw(solrev.g);
dot(solrev.g);
real t=reltime(solrev.g,.5);
dot(format("time du point = %f",t),point(solrev.g,t),NE);


dans lequel on constate que :

Code: Tout sélectionner
real t=reltime(solrev.g,.5);


ne donne pas le point de 'time 3'... et donc pas la section par le plan d'équation x=4.

2011-07-02_112559.png
GMaths
Exa-utilisateur
 
Messages: 2031
Inscription: Lundi 01 Octobre 2007, 09:20
Statut actuel: Actif et salarié | Enseignant

Re: Petit (mais alors tout petit) défi

Messagepar projetmbc » Samedi 02 Juillet 2011, 10:36

GMaths a écrit:
projetmbc a écrit:si au moins le concepteur du sujet avait fait cet effort.

???
Tu veux dire : l'effort d'une figure qui correspondent mieux à la forme réelle ???

Lors de l'explication du barême, nous étions plusieurs à émettre les critiques suivantes :

  1. Donner la figure sans les axes, c'est un bon moyen de mettre la majorité des élèves de TGM en difficulté.
  2. Le dessin du solide, surement fait sous Worst de Windaube de façon schématique ne reprenait pas l'allure de la courbe.
  3. Les deux points précédents rendent inutilement compliqué l'énoncé, même si en tant qu'enseignant on voit tout de suite ce qu'il se passe, je doute que les élèves y ont bien compris quelque chose.
  4. Le coup du calcul formel pour demander d'utiliser la calculatrice, je préfère pas en parler.
  5. ...etc

Par contre, si je regarde ta figure, et je l'imagine dans un sujet de BAC, là je deviens un peu moins critique.

PS : j'aime beaucoup le verre de Chellier.
projetmbc
Péta-utilisateur
 
Messages: 1895
Inscription: Samedi 29 Décembre 2007, 00:58
Statut actuel: Actif et salarié | Enseignant

Re: Petit (mais alors tout petit) défi

Messagepar GMaths » Samedi 02 Juillet 2011, 11:11

GMaths a écrit:dans lequel on constate que :

Code: Tout sélectionner
real t=reltime(solrev.g,.5);


ne donne pas le point de 'time 3'... et donc pas la section par le plan d'équation x=4.


On peut alors penser à mettre :

Code: Tout sélectionner
solrev.transverse(s,3);


mais cela ne fonctionne pas... et j'ai mis un temps certain à comprendre la subtilité : il faut mettre :

Code: Tout sélectionner
solrev.transverse(s,3.0);

ou
Code: Tout sélectionner
solrev.transverse(s,t=3);


pour obtenir la section souhaitée.

2011-07-02_121032.png


Sujet clos pour moi : je retourne à mes propres développements (ma base de sujets de bac). :-)
GMaths
Exa-utilisateur
 
Messages: 2031
Inscription: Lundi 01 Octobre 2007, 09:20
Statut actuel: Actif et salarié | Enseignant

Re: Petit (mais alors tout petit) défi

Messagepar GMaths » Samedi 02 Juillet 2011, 12:10

Un dernier ajout tout de même :

pour ne pas avoir à préciser n dans la définition de solrev et à réfléchir ensuite au numéro du noeud correspondant à la valeur de x souhaitée... on préfèrera ceci :

Code: Tout sélectionner
...

revolution solrev=revolution(f,1,7,operator..,X);
...

real x=4;
real ti=(x-solrev.m.x)/(solrev.M.x-solrev.m.x)*length(solrev.g);

solrev.transverse(s,ti);


pour ajouter la section dans le plan d'équation x=4.
GMaths
Exa-utilisateur
 
Messages: 2031
Inscription: Lundi 01 Octobre 2007, 09:20
Statut actuel: Actif et salarié | Enseignant

Re: Petit (mais alors tout petit) défi

Messagepar GMaths » Samedi 02 Juillet 2011, 15:05

Pour qu'il en reste une trace facile à trouver :

j'ai mis un exemple d'application 2d de ce qui précède ici

... et je vais reprendre probablement, dans la galerie, aussi l'exemple 3d... mais plus tard car j'ai un petit souci avec ma définition de la projection cartesienneY à revoir d'abord.
A moins que je me rabatte sur une projection conventionnelle :
Code: Tout sélectionner
import solids;
import gm;
size(10cm);

//currentprojection=cavaliereY;
currentprojection=orthographic((20,-40,20),zoom=.9);

real f(real x) {return -x*log(x)+2*x;}

revolution solrev=revolution(f,1,7,6,operator..,X);

draw(surface(solrev),paleblue+opacity(.7),nolight); // ,render(compression=Low,merge=true)

skeleton s;
solrev.transverse(s,reltime(solrev.g,0));
solrev.transverse(s,reltime(solrev.g,1));

real x=4;
real ti=(x-solrev.m.x)/(solrev.M.x-solrev.m.x)*length(solrev.g);

solrev.transverse(s,ti);

draw(s.transverse.back,linetype("8 8"));
draw(s.transverse.front);
draw(solrev.silhouette(),.6bp+blue);

xaxis3("$x$",xmin=0,xmax=7.9,OutTicks(NoZero,Step=1),Arrow3);
zaxis3("$z$",Arrow3);

draw(solrev.g);
dot(solrev.g);
dot(format("time du point = %f",ti),point(solrev.g,ti),NE);


bacsti.pdf
(439.69 Kio) Téléchargé 86 fois
GMaths
Exa-utilisateur
 
Messages: 2031
Inscription: Lundi 01 Octobre 2007, 09:20
Statut actuel: Actif et salarié | Enseignant

Re: Petit (mais alors tout petit) défi

Messagepar chellier » Samedi 02 Juillet 2011, 21:48

GMaths a écrit:mais plus tard car j'ai un petit souci avec ma définition de la projection cartesienneY à revoir d'abord.

De quelle genre?
Que donne celle que je définis dans ma doc (voir ma signature, dans les annexes)?

Christophe
chellier
Modérateur
 
Messages: 355
Inscription: Samedi 25 Juillet 2009, 11:25
Localisation: Le Creusot
Statut actuel: Actif et salarié | Enseignant

Re: Petit (mais alors tout petit) défi

Messagepar GMaths » Samedi 02 Juillet 2011, 22:40

chellier a écrit:De quelle genre?

Un truc bizarre : un changement d'angle de vue quand je mets ou j'enlève -render=4 en option de compilation.

Code: Tout sélectionner
projection cavaliereY(real angle=45, real rapport=.5)
{
  transform3 t={{1,rapport*Cos(angle),0,0},
                {0,rapport*Sin(angle),1,0},
                {0,-1,0,-1},
                {0,0,0,1}};
  return projection((Cos(angle)^2,-1,1-Cos(angle)^2),normal=(0,-1,0),
  new transformation(triple,triple,triple) { return transformation(t);});
}


Je regarderai plus tard le problème... car je sais le parer pour l'instant et je n'en ai pas besoin.
GMaths
Exa-utilisateur
 
Messages: 2031
Inscription: Lundi 01 Octobre 2007, 09:20
Statut actuel: Actif et salarié | Enseignant

Re: Petit (mais alors tout petit) défi

Messagepar chellier » Dimanche 03 Juillet 2011, 10:55

GMaths a écrit:Un truc bizarre : un changement d'angle de vue quand je mets ou j'enlève -render=4 en option de compilation.

Je viens de faire quelques essais, je ne vois rien de tout ça... Ni avec la définition de la perspective cavalière pcY (et pcX) que j'ai déjà donné dans mon démarrage rapide, annexe D, qui en fait revient à la même que la tienne.

Christophe
chellier
Modérateur
 
Messages: 355
Inscription: Samedi 25 Juillet 2009, 11:25
Localisation: Le Creusot
Statut actuel: Actif et salarié | Enseignant

Re: Petit (mais alors tout petit) défi

Messagepar rebouxo » Dimanche 25 Septembre 2011, 22:34

Je déterre se sujet.

Grâce au code de Gaëtan, j'ai réussi à faire une autre figure.

Je bloque sur quelques trucs :

dans solrev.transverse(s,reltime(solrev.g,0));, que veut dire le solrev.g et plus particulièrement le .g ?
J'ai voulu rajouter l'axe des y, mais il ne pointe pas vers moi, comment faire pour le faire venir à moi.

Enfin, je voudrais un ligne sur le bas de ma figure. J'ai réussi à le faire pour le haut, mais le bas, je vois pas.

[asy unknown error.]

Code: Tout sélectionner
import solids;
size(10cm,10cm);

currentprojection=orthographic(5,-20,5);

real f(real x) {return -x^3+ 4.5*x^2-6*x+3;}
real g(real x){return 0.5 ;}
real h(real x){return 1 ;}

revolution solrev=revolution(f,1,2,1,operator..,X);
revolution goulot=revolution(g,0,1,1,operator..,X);
revolution cul=revolution(h,2,5,1,operator..,X);

draw(surface(solrev),paleblue+opacity(.25),nolight); //
draw(surface(goulot),paleblue+opacity(.25),nolight); //
draw(surface(cul),paleblue+opacity(.25),nolight); //

skeleton s_1;
// permet de faire des tranches. Construction de l'intersection
solrev.transverse(s_1,reltime(solrev.g,0)); // début
// solrev.transverse(s_1,reltime(solrev.g,1)); // fin
// solrev.transverse(s_1,reltime(solrev.g,.5)); //milieu

// Dessin de l'intersection
draw(s_1.transverse.back,linetype("8 8"));
draw(s_1.transverse.front);



skeleton s_2;
goulot.transverse(s_2,reltime(goulot.g,0)) ;

draw(s_2.transverse.back,linetype("8 8"));
draw(s_2.transverse.front);


skeleton s_3;
cul.transverse(s_3,reltime(cul.g,0)) ;
cul.transverse(s_3,reltime(cul.g,1)) ;


draw(s_3.transverse.back,linetype("8 8"));
draw(s_3.transverse.front);



xaxis3("$x$",xmin=0,xmax=5.0,OutTicks(NoZero,Step=1),Arrow3);
yaxis3("$y$",Arrow3) ;
zaxis3("$z$",Arrow3);

draw(solrev.g);
draw(goulot.g);
draw(cul.g) ;
// dot(solrev.g);
real t=reltime(solrev.g,.5);


Les lignes horizontales ne sont pas très intéressantes non plus.

Merci de vos réponses.

Olivier
A line is a point that went for a walk. Paul Klee
Par solidarité, pas de MP
rebouxo
Modérateur
 
Messages: 6927
Inscription: Mercredi 15 Février 2006, 13:18
Localisation: le havre
Statut actuel: Actif et salarié | Enseignant

Re: Petit (mais alors tout petit) défi

Messagepar GMaths » Dimanche 25 Septembre 2011, 23:39

rebouxo a écrit:dans solrev.transverse(s,reltime(solrev.g,0));, que veut dire le solrev.g et plus particulièrement le .g ?

C'est le path générateur.

Pour avoir un trait qui délimite le tour, il y a .silhouette() mais alors il faut traiter la bouteille en une fois.

Une version sensiblement plus courte qui le fait, et qui prend vraiment en compte la partie cubique (qui n'était pas tracée dans le code précédent, compte tenu du n=1 passé à graph) :

[asy unknown error.]

Code: Tout sélectionner
import solids;
size(10cm,10cm);
currentprojection=orthographic(5,-20,5);
real f(real x) {
if(x<1) return .5;
if(x>2) return 1;
return -x^3+ 4.5*x^2-6*x+3;
}
revolution bouteille=revolution(f,0,5,100,operator--,X);
draw(surface(bouteille),paleblue+opacity(.25),nolight);
draw(bouteille.silhouette(),black);

real k1=arclength(revolution(f,0,1,X).g) / arclength(revolution(f,0,5,X).g),
k2=arclength(revolution(f,0,2,X).g) / arclength(revolution(f,0,5,X).g);
skeleton sk;
bouteille.transverse(sk,reltime(bouteille.g,0));
bouteille.transverse(sk,reltime(bouteille.g,k1));
bouteille.transverse(sk,reltime(bouteille.g,k2));
draw(sk.transverse.back,linetype("8 8"));
draw(sk.transverse.front);


- pour cacher les traits : essayer de compiler avec -render=4 : je n'en ai pas chez moi.

- pour "travailler" dans un repère indirect... je n'ai jamais eu besoin, et je ne suis pas pas sûr qu'il y ait une option qui le permette facilement : il faudra peut-être bricoler (à savoir mettre une flèche dans l'autre sens, sans que réellement on puisse placer un point dans ce repère indirect sans tricher sur le signe du y). La nuit va porter conseil.
GMaths
Exa-utilisateur
 
Messages: 2031
Inscription: Lundi 01 Octobre 2007, 09:20
Statut actuel: Actif et salarié | Enseignant

Re: Petit (mais alors tout petit) défi

Messagepar guiguiche » Lundi 26 Septembre 2011, 08:26

Plutôt que chercher à travailler dans un repère indirect, ce ne serait pas plus simple de permuter les deux axes (x et y) ?
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: 8067
Inscription: Vendredi 06 Janvier 2006, 15:32
Localisation: Le Mans
Statut actuel: Actif et salarié | Enseignant

Re: Petit (mais alors tout petit) défi

Messagepar rebouxo » Lundi 26 Septembre 2011, 10:21

Ah oui, je me disais aussi que je trouvais les connexions un peu anguleuse.

Bon, je vais me passer de l'axe des $y$, pas franchement utile.

GMaths a écrit:C'est le path générateur.


Cela ne m'éclaire guère. C'est ce qui permet de dire à asymptote la génératrice de ton solide de révolution ?
Si c'est cela, g n'est pas assez parlant (enfin je trouve...)

Bon, je regarde pourquoi je n'ai pas réussi à faire apparaître la partie cubique.

Merci
Olivier
A line is a point that went for a walk. Paul Klee
Par solidarité, pas de MP
rebouxo
Modérateur
 
Messages: 6927
Inscription: Mercredi 15 Février 2006, 13:18
Localisation: le havre
Statut actuel: Actif et salarié | Enseignant

Re: Petit (mais alors tout petit) défi

Messagepar GMaths » Lundi 26 Septembre 2011, 12:07

rebouxo a écrit:Bon, je vais me passer de l'axe des $y$, pas franchement utile.

GMaths a écrit:C'est le path générateur.


Cela ne m'éclaire guère. C'est ce qui permet de dire à asymptote la génératrice de ton solide de révolution ?
Si c'est cela, g n'est pas assez parlant (enfin je trouve...)


J'ai écrit path mais c'était sous-entendu en 3D, donc un path3.

Oui, la génératrice.

Début de la définition de la structure revolution dans solids.asy ; le commentaire préalable l'explique :

Code: Tout sélectionner
// A surface of revolution generated by rotating a planar path3 g
// from angle1 to angle2 about c--c+axis.
struct revolution {
  triple c;
  path3 g;
  triple axis;
  real angle1,angle2;
  triple M;
  triple m;

.....................
GMaths
Exa-utilisateur
 
Messages: 2031
Inscription: Lundi 01 Octobre 2007, 09:20
Statut actuel: Actif et salarié | Enseignant


Retourner vers Asymptote

 


  • Articles en relation
    Réponses
    Vus
    Dernier message

Qui est en ligne

Utilisateurs parcourant ce forum: Ahrefs [Bot] et 2 invités