Solides

Les propositions de correctifs ou d'exercices pour Pyromaths.

Modérateur : Développeurs

Avatar de l’utilisateur
Jérôme
Administrateur - Site Admin
Messages : 1083
Inscription : 26 août 2006, 13:10
Localisation : Nantes
Contact :

Solides

Message par Jérôme » 22 mai 2012, 23:06

Bonjour,
j'ai passé quelques temps à essayer de "programmer" en pstricks. Mon objectif était de pouvoir obtenir facilement des solides usuels (cône de révolution, cylindre de révolution, sphère et pavé droit) en pstricks. Jusque là, j'utilisais metapost ou asymptote pour les représentations en perspectives cavalières. Seulement voilà, je ne maîtrise pas du tout ces langages, et je souhaiterais que Pyromaths s'en tienne à pstricks (confère mes essais avec tikz).
Voici mes macros. Elles nécessitent trois "packages" pour fonctionner

Code : Tout sélectionner

\usepackage{pst-eucl,graphicx,pstricks-add}
pstricks-add doit être assez récent pour pouvoir utiliser \psEllipseTangents.
Ensuite, on les appelle assez simplement. Pour l'exemple, voilà ce que j'ai testé :

Code : Tout sélectionner

\begin{pspicture}(0,-1.6)(12.5,5.6)
  \pspPave(4,0){6}{4}{4}
  \pstMiddleAB{PA}{PH}{M}
  \pspCone*(M){2}{6}
  \pstGeonode(sommet){S}
  \pspPointDisque*(M){2}{-30}
  \psline[linestyle=dashed](S)(M)(pointdisque)
  \pspAngleDroit{pointdisque}{M}{S}
  \pspSphere(2,2){1.5}
  \pspCylindre(2,-1){1.5}{6}
\end{pspicture}

Image
Les macros :

Code : Tout sélectionner

\makeatletter
\newcommand*{\pspPointDisque}{%
  % Place le nœud ``pointdisque'' sur le disque d'un plan horizontal en
  % perspective cavalière à un angle donné par rapport au centre.
  % La commande étoilée place le nœud sur un disque sur la face droite d'un
  % cube.
  % (#1): coordonnées du centre du disque
  % #2: rayon du disque
  % #3: angle sur le disque
  \@ifstar{\psppointdisque@(1.0855,0.5585){75.324}}%
          {\psppointdisque@(1.1842,0.2955){9.409}}%
  }

\def\psppointdisque@(#1,#2)#3(#4)#5#6{%
  % (#1,#2): écrasement de l'ellipse
  % #3: angle de rotation
  % (#4): coordonnées du centre du cône
  % #5: rayon de la base
  % #6: angle sur le disque
  \pst@@getcoor{#4}%
  %deplace le cone de centre (0,0) sur le centre choisi :
  \rput[Br](!\pst@coor /YA exch \pst@number\psyunit div def /XA exch %
             \pst@number\psxunit div def XA YA){%
    %rotation de la perspective pour qu'elle s'inscrive dans des faces de cubes
    \rotatebox[x=0cm,y=0cm]{#3}{%
      %grand rayon, petit rayon
      \pstVerb{/PYROGR #1 #5 mul def /PYROPR #2 #5 mul def}%
      \pnode(!PYROGR #6 cos mul PYROPR #6 sin mul){pointdisque}%
      }%
    }%
  }

\def\pspAngleDroit#1#2#3{%
  % Trace un angle droit en perspective cavalière entre les trois nœuds passés
  % en paramètres.
  \pstInterLC[Radius=\pstDistVal{.3},PointSymbol=none,PointName=none]{#2}{#1}{#2}{}{RAAO}{RAA}%
  \pstInterLC[Radius=\pstDistVal{.3},PointSymbol=none,PointName=none]{#2}{#3}{#2}{}{RAOO}{RAO}%
  \pstOrtSym[PointSymbol=none,PointName=none]{RAA}{RAO}{#2}[RA]%
  \pspolygon(#2)(RAO)(RA)(RAA)%
  }

\newcommand*{\pspCylindre}{
  % Trace un cylindre de révolution en perspective cavalière 30°/0.7,
  % de centre, rayon et hauteur donnés, dont la base est sur un plan horizontal.
  % La commande étoilée trace un cylindre dont la base est sur la face droite
  % d'un cube.
  % (#1): coordonnées du centre du cylindre
  % #2: rayon de l'ellipse
  % #3: hauteur du cylindre
  \@ifstar{\pspcylindre@(1.0855,0.5585){75.324}}%
          {\pspcylindre@(1.1842,0.2955){9.409}}%
  }

\def\pspcylindre@(#1,#2)#3(#4)#5#6{%
  % Trace un cylindre de révolution en perspective cavalière 30°/0.7,
  % de centre, rayon et hauteur donnés, dont la base est sur un plan horizontal.
  % La commande étoilée trace un cylindre dont la base est sur la face droite
  % d'un cube.
  % (#1,#2): écrasement de l'ellipse
  % #3: angle de rotation
  % (#4): coordonnées du centre du cylindre
  % #5: rayon de la base
  % #6: hauteur du cylindre
  \pst@@getcoor{#4}%
  %deplace le cone de centre (0,0) sur le centre choisi :
  \rput[Br](!\pst@coor /YA exch \pst@number\psyunit div def /XA exch %
             \pst@number\psxunit div def XA YA){%
    %rotation de la perspective pour qu'elle s'inscrive dans des faces de cubes
    \rotatebox[x=0cm,y=0cm]{#3}{%
      %grand rayon, petit rayon
      \pstVerb{/PYROGR #1 #5 mul def /PYROPR #2 #5 mul def}%
      %hauteur verticale sinon hauteur horizontale :
      \ifdim #3pt=9.409pt\pnode(!#3 sin #6 mul #3 cos #6 mul){sommet}%
        %Angle pour joindre les deux bases :
        \def\AA{!#3 neg}%
        % trouve les coordonnées des points d'intersection d'une droite de
        % coefficient directeur donné avec une ellipse donnée => Base1 et Base2.
        % (d) ux+vy+w=0 est tangente à (E) x²/a²+y²/b²=1 ssi u²a²+v²b²=w²
        \pstVerb{/PYROWW PYROGR #3 cos mul dup mul PYROPR #3 sin mul dup mul add sqrt def}%
        \pstVerb{/PYROOO PYROWW #3 sin div def}%
        \psEllipseTangents(0,0)(!PYROGR PYROPR)(!0 PYROOO)%
        \pnode(EllipseT1){Base1}%
        \psEllipseTangents(0,0)(!PYROGR PYROPR)(!0 PYROOO neg)%
        \pnode(EllipseT1){Base2}%
      \else\pnode(!#3 cos #6 mul #3 sin neg #6 mul){sommet}%
        %Angle pour joindre les deux bases :
        \def\AA{!#3 neg 90 sub}%
        % trouve les coordonnées des points d'intersection d'une droite de
        % coefficient directeur donné avec une ellipse donnée => Base1 et Base2.
        % (d) ux+vy+w=0 est tangente à (E) x²/a²+y²/b²=1 ssi u²a²+v²b²=w²
        \pstVerb{/PYROWW PYROGR #3 sin mul dup mul PYROPR #3 cos mul dup mul add sqrt def}%
        \pstVerb{/PYROOO PYROWW #3 cos div def}%
        \psEllipseTangents(0,0)(!PYROGR PYROPR)(!0 PYROOO)%
        \pnode(EllipseT2){Base1}%
        \psEllipseTangents(0,0)(!PYROGR PYROPR)(!0 PYROOO neg)%
        \pnode(EllipseT2){Base2}%
      \fi%
      %pointillés sur la base inférieure du cylindre, déterminée en fonction du
      %signe de la hauteur :
      \ifdim #6cm>0cm\def\LBI{dashed}\def\LBII{solid}%
      \else\def\LBI{solid}\def\LBII{dashed}%
      \fi%
      %ordonnée à l'origine de la tangente
      \psline(Base1)([offset=#6,angle=\AA]Base1)
      \psline(Base2)([offset=#6,angle=\AA]Base2)%
      \psellipticarc(0,0)(!PYROGR PYROPR){(Base1)}{(Base2)}%
      \psellipticarc[linestyle=\LBI](0,0)(!PYROGR PYROPR){(Base2)}{(Base1)}%
      \psellipticarc(sommet)(!PYROGR PYROPR){(Base1)}{(Base2)}%
      \psellipticarc[linestyle=\LBII](sommet)(!PYROGR PYROPR){(Base2)}{(Base1)}%
      }%
    }%
  }

\newcommand*{\pspCone}{%
  \@ifstar{\pspcone@(1.0855,0.5585){75.324}}%
          {\pspcone@(1.1842,0.2955){9.409}}%
  }

\def\pspcone@(#1,#2)#3(#4)#5#6{%
  % Trace un cône de révolution en perspective cavalière 30°/0.7,
  % de centre, rayon et hauteur donnés, dont la base est sur un plan horizontal.
  % La commande étoilée trace un cône dont la base est sur la face droite d'un
  % cube.
  % (#4): coordonnées du centre du cône
  % #5: rayon de la base
  % #6: hauteur du cône
  \pst@@getcoor{#4}
  % déplace le cône de centre (0,0) sur le centre choisi :
  \rput[Br](!\pst@coor /YA exch \pst@number\psyunit div def /XA exch %
             \pst@number\psxunit div def XA YA){%
    %rotation de la perspective pour qu'elle s'inscrive dans des faces de cubes
    \rotatebox[x=0cm,y=0cm]{#3}{%
      %grand rayon, petit rayon
      \pstVerb{/PYROGR #1 #5 mul def /PYROPR #2 #5 mul def}%
      %hauteur verticale sinon hauteur horizontale :
      \ifdim #3pt=9.409pt\pnode(!#3 sin #6 mul #3 cos #6 mul){sommet}%
      \else\pnode(!#3 cos #6 mul #3 sin neg #6 mul){sommet}\fi%
      \psEllipseTangents(0,0)(!PYROGR PYROPR)(sommet)%
      %si hauteur positive, alors pointillés sur la base du cône :
      \ifdim #6cm<0cm\def\LS{solid}\else\def\LS{dashed}\fi
      \psellipticarc(0,0)(!PYROGR PYROPR){(EllipseT1)}{(EllipseT2)}%
      \psellipticarc[linestyle=\LS](0,0)(!PYROGR PYROPR){(EllipseT2)}{(EllipseT1)}%
      \psline[](EllipseT2)(sommet)(EllipseT1)%
      }%
    }%
  }

\newcommand*{\pspSphere}{%
  \@ifstar{\pspsphere@(1.0855,0.5585){75.324}}%
          {\pspsphere@(1.1842,0.2955){9.409}}%
  }

\def\pspsphere@(#1,#2)#3(#4)#5{%
  % Trace une sphère en perspective cavalière 30°/0.7, de centre et rayon
  % donnés, dont la base est sur un plan horizontal.
  % La commande étoilée trace une sphère dont la base est sur la face droite
  % d'un cube.
  % (#4): coordonnées du centre de la sphère
  % #5: rayon de la sphère
  \pst@@getcoor{#4}
  % déplace la sphère de centre (0,0) sur le centre choisi :
  \rput[Br](!\pst@coor /YA exch \pst@number\psyunit div def /XA exch %
             \pst@number\psxunit div def XA YA){%
    %rotation de la perspective pour qu'elle s'inscrive dans des faces de cubes
    \rotatebox[x=0cm,y=0cm]{#3}{%
      %grand rayon, petit rayon
      \pstVerb{/PYROGR #1 #5 mul def /PYROPR #2 #5 mul def}%
      %gestion des pointillés selon l'orientation du grand cercle :
      \ifdim #3pt=9.409pt\def\LI{solid}\def\LII{dashed}\else\def\LI{dashed}\def\LII{solid}\fi%
      \psellipticarc[linestyle=\LI](0,0)(!PYROGR PYROPR){180}{360}%
      \psellipticarc[linestyle=\LII](0,0)(!PYROGR PYROPR){0}{180}%
      \pscircle{!#1 #5 mul}%
      }%
    }%
  }

\def\pspPave(#1)#2#3#4{%
  % Trace un pavé droit en perspective cavalière 30°/0.7.
  % (#1): position du sommet inférieur droit de la face avant
  % #2: largeur
  % #3: profondeur
  % #4: hauteur
  \pst@@getcoor{#1}
  % déplace le pavé sur le point choisi :
  \rput[Br](!\pst@coor /YA exch \pst@number\psyunit div def /XA exch %
             \pst@number\psxunit div def XA YA){%
    \pnode(0,0){PA}%
    \pnode(#2,0){PB}%
    \pnode(!0.7 #3 mul 30 cos mul 0.7 #3 mul 30 sin mul){PD}%
    \pnode(!0.7 #3 mul 30 cos mul #2 add 0.7 #3 mul 30 sin mul){PC}%
    \pnode([offset=#4]PA){PE}%
    \pnode([offset=#4]PB){PF}%
    \pnode([offset=#4]PC){PG}%
    \pnode([offset=#4]PD){PH}%
    \pspolygon(PA)(PB)(PC)(PG)(PH)(PE)%
    \psline(PE)(PF)(PB)%
    \psline(PG)(PF)%
    \psline[linestyle=dashed](PC)(PD)(PA)%
    \psline[linestyle=dashed](PH)(PD)%
    }%
  }
\makeatother
La question est : que pourrions nous faire de cela dans Pyromaths ?
Pyromaths génère des fiches d'exercices et leur corrigé en toute simplicité.
Un programme multi-plateformes libre et gratuit sous licence GPL

Avatar de l’utilisateur
Arnaud
Critique officiel de pyromaths
Messages : 609
Inscription : 26 août 2006, 21:49
Localisation : Allemagne
Contact :

Re: Solides

Message par Arnaud » 23 mai 2012, 01:19

T'essayes par là de nous dire qu'il manque des exos de géométrie dans l'espace dans pyromaths ? :mrgreen:

L'information est là, on verra avec celui ou celle qui se lancera le premier là-dedans.
Tu peux déjà commencer par intégrer ces commandes dans le git.

Perso, je pars en vacances samedi, donc vous aurez peu de nouvelles pendant les deux prochaines semaines.

Avatar de l’utilisateur
Jérôme
Administrateur - Site Admin
Messages : 1083
Inscription : 26 août 2006, 13:10
Localisation : Nantes
Contact :

Re: Solides

Message par Jérôme » 23 mai 2012, 09:36

Bonnes vacances alors ! :)
J'essaie plutôt de dire : "qui se chargerait de faire des exos de géométrie dans l'espace maintenant qu'on a ces outils ?". ;)
Les publier sur le git ? Oui. Ça fait tellement longtemps que je ne suis pas certain de me souvenir comment faire... :? En faisant un petit effort, je devrais trouver.
Pyromaths génère des fiches d'exercices et leur corrigé en toute simplicité.
Un programme multi-plateformes libre et gratuit sous licence GPL

Avatar de l’utilisateur
Arnaud
Critique officiel de pyromaths
Messages : 609
Inscription : 26 août 2006, 21:49
Localisation : Allemagne
Contact :

Re: Solides

Message par Arnaud » 23 mai 2012, 10:03


Avatar de l’utilisateur
Jérôme
Administrateur - Site Admin
Messages : 1083
Inscription : 26 août 2006, 13:10
Localisation : Nantes
Contact :

Re: Solides

Message par Jérôme » 23 mai 2012, 12:10

Très bien. Je crois que tu as mon adresse postale :mrgreen:
Pyromaths génère des fiches d'exercices et leur corrigé en toute simplicité.
Un programme multi-plateformes libre et gratuit sous licence GPL

Avatar de l’utilisateur
Jérôme
Administrateur - Site Admin
Messages : 1083
Inscription : 26 août 2006, 13:10
Localisation : Nantes
Contact :

Re: Solides

Message par Jérôme » 23 mai 2012, 19:44

Code : Tout sélectionner

jerome@jerome-P5K:~/Documents/projets/pyromaths$ git pull
Le programme 'git' n'est pas encore installé.  Vous pouvez l'installer en tapant :
sudo apt-get install git
Ah oui, quand même...
Pyromaths génère des fiches d'exercices et leur corrigé en toute simplicité.
Un programme multi-plateformes libre et gratuit sous licence GPL

Avatar de l’utilisateur
Arnaud
Critique officiel de pyromaths
Messages : 609
Inscription : 26 août 2006, 21:49
Localisation : Allemagne
Contact :

Re: Solides

Message par Arnaud » 23 mai 2012, 23:06

Ha ben c'est du joli...

guicel
Messages : 18
Inscription : 24 mars 2009, 10:07

Re: Solides

Message par guicel » 11 juin 2012, 21:03

D'ici peu je vais pouvoir y réfléchir...

C'est un gros boulot que tu as fait là.

Je suis un peu gêné par la représentation du cylindre et de la sphère.
L'angle de 30° pour la base et le grand cercle m'est peu familier.
J'ai peur que cela dérange les élèves.

Cela peut-il être paramétrable ?

Je verrais bien un exo de représentation de section en 3e

J'ai hâte de trouver le temps de m'y mettre.
A bientôt

Guillaume

Avatar de l’utilisateur
Jérôme
Administrateur - Site Admin
Messages : 1083
Inscription : 26 août 2006, 13:10
Localisation : Nantes
Contact :

Re: Solides

Message par Jérôme » 11 juin 2012, 22:27

Salut Guillaume,
merci pour tes commentaires. Concernant la gêne occasionnée par les représentations de la sphère et du cylindre, elle est pour tes élèves ou pour toi ? ;)
Je trouve cela pratique, car cela permet de "poser" un cylindre sur un cube par exemple. J'imagine donc que cette représentation est correcte (mais ne suis pas expert en la matière).
En effet, un exo de sections serait le bienvenu. Je n'ai rien fait pour la pyramide encore, car je ne sais pas quoi mettre comme paramètre de ma fonction pspPyramide. Si vous avez des idées, je suis preneur.
Pyromaths génère des fiches d'exercices et leur corrigé en toute simplicité.
Un programme multi-plateformes libre et gratuit sous licence GPL

guicel
Messages : 18
Inscription : 24 mars 2009, 10:07

Re: Solides

Message par guicel » 12 juin 2012, 08:53

peut être plus moi que mes élèves. Ce qui m'inquiète davantage :)

Le souci c'est que le cylindre ne semble pas être un cylindre de révoution.

Je vais faire un sondage chez mes collègues.

Guillaume

Avatar de l’utilisateur
Jérôme
Administrateur - Site Admin
Messages : 1083
Inscription : 26 août 2006, 13:10
Localisation : Nantes
Contact :

Re: Solides

Message par Jérôme » 26 mai 2013, 19:07

Salut Guillaume,
tu ne m'as jamais donné le résultat du sondage auprès de tes collègues :)
Pyromaths génère des fiches d'exercices et leur corrigé en toute simplicité.
Un programme multi-plateformes libre et gratuit sous licence GPL

Répondre