Page 1 sur 1

Petit (mais alors tout petit) défi

MessagePosté: Vendredi 01 Juillet 2011, 21:08
par rebouxo
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

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

MessagePosté: Vendredi 01 Juillet 2011, 21:48
par chellier
C'est quelque chose comme ça ? :

verre.png
verre.png (29.61 Kio) Vu 1320 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

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

MessagePosté: Samedi 02 Juillet 2011, 01:31
par GMaths
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.

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

MessagePosté: Samedi 02 Juillet 2011, 09:32
par GMaths
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.

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

MessagePosté: Samedi 02 Juillet 2011, 09:46
par GMaths
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).

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

MessagePosté: Samedi 02 Juillet 2011, 09:49
par projetmbc
Bonjour,
si au moins le concepteur du sujet avait fait cet effort. Du grand n'importe quoi ce problème de STI GM.

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

MessagePosté: Samedi 02 Juillet 2011, 09:55
par GMaths
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 ???

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

MessagePosté: Samedi 02 Juillet 2011, 10:26
par GMaths
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

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

MessagePosté: Samedi 02 Juillet 2011, 10:36
par projetmbc
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.

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

MessagePosté: Samedi 02 Juillet 2011, 11:11
par GMaths
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). :-)

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

MessagePosté: Samedi 02 Juillet 2011, 12:10
par GMaths
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.

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

MessagePosté: Samedi 02 Juillet 2011, 15:05
par GMaths
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é 95 fois

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

MessagePosté: Samedi 02 Juillet 2011, 21:48
par chellier
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

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

MessagePosté: Samedi 02 Juillet 2011, 22:40
par GMaths
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.

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

MessagePosté: Dimanche 03 Juillet 2011, 10:55
par chellier
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

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

MessagePosté: Dimanche 25 Septembre 2011, 22:34
par rebouxo
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

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

MessagePosté: Dimanche 25 Septembre 2011, 23:39
par GMaths
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.

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

MessagePosté: Lundi 26 Septembre 2011, 08:26
par guiguiche
Plutôt que chercher à travailler dans un repère indirect, ce ne serait pas plus simple de permuter les deux axes (x et y) ?

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

MessagePosté: Lundi 26 Septembre 2011, 10:21
par rebouxo
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

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

MessagePosté: Lundi 26 Septembre 2011, 12:07
par GMaths
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;

.....................