Solides

Les propositions de correctifs ou d'exercices pour Pyromaths.

Modérateur: Développeurs

Solides

Messagede Jérôme » Mar 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
Jérôme
Administrateur - Site Admin
 
Messages: 1071
Inscription: Sam 26 Aoû 2006, 13:10
Localisation: Nantes

Re: Solides

Messagede Arnaud » Mer 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
Arnaud
Critique officiel de pyromaths
 
Messages: 603
Inscription: Sam 26 Aoû 2006, 21:49
Localisation: Allemagne

Re: Solides

Messagede Jérôme » Mer 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
Jérôme
Administrateur - Site Admin
 
Messages: 1071
Inscription: Sam 26 Aoû 2006, 13:10
Localisation: Nantes

Re: Solides

Messagede Arnaud » Mer 23 Mai 2012, 10:03

Avatar de l’utilisateur
Arnaud
Critique officiel de pyromaths
 
Messages: 603
Inscription: Sam 26 Aoû 2006, 21:49
Localisation: Allemagne

Re: Solides

Messagede Jérôme » Mer 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: 1071
Inscription: Sam 26 Aoû 2006, 13:10
Localisation: Nantes

Re: Solides

Messagede Jérôme » Mer 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
Jérôme
Administrateur - Site Admin
 
Messages: 1071
Inscription: Sam 26 Aoû 2006, 13:10
Localisation: Nantes

Re: Solides

Messagede Arnaud » Mer 23 Mai 2012, 23:06

Ha ben c'est du joli...
Avatar de l’utilisateur
Arnaud
Critique officiel de pyromaths
 
Messages: 603
Inscription: Sam 26 Aoû 2006, 21:49
Localisation: Allemagne

Re: Solides

Messagede guicel » Lun 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
guicel
 
Messages: 18
Inscription: Mar 24 Mar 2009, 11:07

Re: Solides

Messagede Jérôme » Lun 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
Avatar de l’utilisateur
Jérôme
Administrateur - Site Admin
 
Messages: 1071
Inscription: Sam 26 Aoû 2006, 13:10
Localisation: Nantes

Re: Solides

Messagede guicel » Mar 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
guicel
 
Messages: 18
Inscription: Mar 24 Mar 2009, 11:07

Re: Solides

Messagede Jérôme » Dim 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
Avatar de l’utilisateur
Jérôme
Administrateur - Site Admin
 
Messages: 1071
Inscription: Sam 26 Aoû 2006, 13:10
Localisation: Nantes


Retourner vers Propositions

Qui est en ligne

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