Le dessin des trois dés jetés sur un tapis de jeu vient d'un travail de Manuel Luque, réalisé avec PStricks, et réutilisé avec son aimable autorisation.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -*- Mode: Latex -*- %%%%%%%%%%%%%%%%%%%%%%%%%%%% %% %% pnode3D.tex--- Manuel Luque <Mluque5130@aol.com> (June 2000 - April 2002) %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \documentclass{article} \usepackage[a4paper,margin=2cm]{geometry} \usepackage[T1]{fontenc} \usepackage[latin1]{inputenc}% \usepackage{pstricks} \usepackage{pst-node} \usepackage{pst-plot} % fp est de Michael Mehlich \usepackage[nomessages]{fp} % Dés en 3D % 31 mars 2002 - 27 mai 2002(documentation version 0.2) % Avec les remarques et les modifications de Denis Girou de 27 mars 2002 % Le générateur de nombres aléatoires est de % Donald Arseneau % http://ctan.mines-albi.fr/macros/generic/misc/random.tex \input random \makeatletter %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \pst@addfams{pst-die} \define@key[psset]{pst-die}{THETA}{\edef\psk@IIID@Theta{#1}} \define@key[psset]{pst-die}{PHI}{\edef\psk@IIID@Phi{#1}} \define@key[psset]{pst-die}{Dobs}{\edef\psk@IIID@Dobs{#1}} \define@key[psset]{pst-die}{Decran}{\edef\psk@IIID@Ecran{#1}} \define@key[psset]{pst-die}{Side}{\edef\psk@Die@Side{#1}} \psset{THETA=60,PHI=60,Dobs=30,Decran=10,Side=2} % \define@key[psset]{pst-die}{thetax}{\edef\psk@Die@Thetax{#1}} \define@key[psset]{pst-die}{thetay}{\edef\psk@Die@Thetay{#1}} \define@key[psset]{pst-die}{thetaz}{\edef\psk@Die@Thetaz{#1}} \define@key[psset]{pst-die}{CX}{\edef\psk@Die@CX{#1}} \define@key[psset]{pst-die}{CY}{\edef\psk@Die@CY{#1}} \define@key[psset]{pst-die}{CZ}{\edef\psk@Die@CZ{#1}} \define@key[psset]{pst-die}{K}{\edef\psk@Die@K{#1}} % \psset{thetax=0,thetay=0,thetaz=0,CX=0,CY=0,CZ=0,K=0.75,linejoin=1} % \newif\ifPst@Axes% \define@key[psset]{pst-die}{axes}[true]{\@nameuse{Pst@Axes#1}}% \psset{axes=false} % \newif\ifPst@carpet% \define@key[psset]{pst-die}{carpet}[true]{\@nameuse{Pst@carpet#1}}% \psset{carpet=false} % \newpsstyle{sol}{fillstyle=vlines,hatchcolor=lightgray,hatchwidth=0.2\pslinewidth,hatchsep=1\pslinewidth} \newpsstyle{Side}{fillstyle=solid,fillcolor=yellow}%grandes faces \newpsstyle{side}{fillstyle=solid,fillcolor=magenta}%coins facettes \newpsstyle{points}{fillstyle=solid,fillcolor=black,linestyle=none}% la couleur des points \definecolor{MonGris}{rgb}{0.8,0.8,0.8} \definecolor{MonRouge}{rgb}{0.8,0,0} \SpecialCoor \def\pnodeIIID{\def\pst@par{}\pst@object{pnodeIIID}} \def\pnodeIIID@i(#1,#2,#3)#4{{% \begin@SpecialObj \pstVerb{% /THETA \psk@IIID@Theta\space def /PHI \psk@IIID@Phi\space def /Dobs \psk@IIID@Dobs\space def /DScreen \psk@IIID@Ecran\space def /Sin1 THETA sin def /Sin2 PHI sin def /Cos1 THETA cos def /Cos2 PHI cos def /Cos1Sin2 Cos1 Sin2 mul def /Sin1Sin2 Sin1 Sin2 mul def /Cos1Cos2 Cos1 Cos2 mul def /Sin1Cos2 Sin1 Cos2 mul def /XpointVue Dobs Cos1Cos2 mul def /YpointVue Dobs Sin1Cos2 mul def /ZpointVue Dobs Sin2 mul def } % \pnode(! /xObservateur #1 Sin1 mul neg #2 Cos1 mul add def /yObservateur #1 Cos1Sin2 mul neg #2 Sin1Sin2 mul sub #3 Cos2 mul add def /zObservateur #1 neg Cos1Cos2 mul #2 Sin1Cos2 mul sub #3 Sin2 mul sub Dobs add def /xScreen DScreen xObservateur mul zObservateur div def /yScreen DScreen yObservateur mul zObservateur div def xScreen yScreen){#4} \end@SpecialObj}} % \def\Die{\def\pst@par{}\pst@object{Die}} \def\Die@i{{% \pst@killglue \begin@SpecialObj \pstVerb{% /CX \psk@Die@CX\space def /CY \psk@Die@CY\space def /CZ \psk@Die@CZ\space def /K \psk@Die@K\space def /thetax \psk@Die@Thetax\space def /thetay \psk@Die@Thetay\space def /thetaz \psk@Die@Thetaz\space def /sinthetax thetax sin def /costhetax thetax cos def /sinthetay thetay sin def /costhetay thetay cos def /sinthetaz thetaz sin def /costhetaz thetaz cos def /M11 costhetaz costhetay mul def /M12 costhetaz sinthetay mul sinthetax mul sinthetaz costhetax mul sub def /M13 costhetaz sinthetay mul costhetax mul sinthetaz sinthetax mul add def /M21 sinthetaz costhetay mul def /M22 sinthetaz sinthetay mul sinthetax mul costhetaz costhetax mul add def /M23 sinthetaz sinthetay mul costhetax mul costhetaz sinthetax mul sub def /M31 sinthetay neg def /M32 sinthetax costhetay mul def /M33 costhetax costhetay mul def /Side \psk@Die@Side\space def /Point Side 4 div def} % rayon des points \CalculsTeX \MatriceRotTeX \CoordinatesFaces \CoordinatesSummit \TestVisibilitySide \TestVisibilitySummit \pnodeIIID(0,0,0){fictif} \ifPst@carpet \Sol \fi \Cube \ifPst@Axes \Axes \fi \end@SpecialObj }} % \def\MatriceRot{% postscript /abscisse M11 abscisse1 mul M12 ordonnee1 mul add M13 cote1 mul add CX add def /ordonnee M21 abscisse1 mul M22 ordonnee1 mul add M23 cote1 mul add CY add def /cote M31 abscisse1 mul M32 ordonnee1 mul add M33 cote1 mul add CZ add def} %%%%%%%% \def\MatriceRotTeX{% \FPeval\Thetax{(\psk@Die@Thetax) * \FPpi/180} \FPeval\Thetay{(\psk@Die@Thetay) * \FPpi/180} \FPeval\Thetaz{(\psk@Die@Thetaz) * \FPpi/180} \FPcos\CosThetax{\Thetax} \FPsin{\SinThetax}{\Thetax} \FPcos\CosThetay{\Thetay} \FPsin{\SinThetay}{\Thetay} \FPcos\CosThetaz{\Thetaz} \FPsin{\SinThetaz}{\Thetaz} \FPeval\Moneone{(\CosThetaz)*(\CosThetay)} \FPeval\Monetwo{(\CosThetaz)*(\SinThetay)*(\SinThetax) - (\SinThetaz)*(\CosThetax)} \FPeval\Monethree{(\CosThetaz)*(\SinThetay)*(\CosThetax) + (\SinThetaz)*(\SinThetax)} \FPeval\Mtwoone{(\SinThetaz)*(\CosThetay)} \FPeval\Mtwotwo{(\SinThetaz)*(\SinThetay)*(\SinThetax) + (\CosThetaz)*(\CosThetax)} \FPeval\Mtwothree{(\SinThetaz)*(\SinThetay)*(\CosThetax) - (\CosThetaz)*(\SinThetax)} \FPeval\Mthreeone{(\SinThetay)*(-1)} \FPeval\Mthreetwo{(\SinThetax)*(\CosThetay)} \FPeval\Mthreethree{(\CosThetax)*(\CosThetay)} } % \def\CoordinatesFaces{% \FPeval\abscisseOne{(\psk@Die@Side)*(\Moneone)+(\psk@Die@CX)} \FPeval\ordonneeOne{(\psk@Die@Side)*(\Mtwoone)+(\psk@Die@CY)} \FPeval\coteOne{(\psk@Die@Side)*(\Mthreeone)+(\psk@Die@CZ)} \FPeval\abscisseTwo{(\psk@Die@Side)*(\Monetwo)+(\psk@Die@CX)} \FPeval\ordonneeTwo{(\psk@Die@Side)*(\Mtwotwo)+(\psk@Die@CY)} \FPeval\coteTwo{(\psk@Die@Side)* (\Mthreetwo)+(\psk@Die@CZ)}% ? \FPeval\abscisseThree{(-\psk@Die@Side)*(\Moneone)+(\psk@Die@CX)} \FPeval\ordonneeThree{(-\psk@Die@Side)*(\Mtwoone)+(\psk@Die@CY)} \FPeval\coteThree{(-\psk@Die@Side)*(\Mthreeone)+(\psk@Die@CZ)} \FPeval\abscisseFour{(-\psk@Die@Side)*(\Monetwo)+(\psk@Die@CX)} \FPeval\ordonneeFour{(-\psk@Die@Side)*(\Mtwotwo)+(\psk@Die@CY)} \FPeval\coteFour{(-\psk@Die@Side)* (\Mthreetwo)+(\psk@Die@CZ)}% ? \FPeval\abscisseFive{(-\psk@Die@Side)*(\Monethree)+(\psk@Die@CX)} \FPeval\ordonneeFive{(-\psk@Die@Side)*(\Mtwothree)+(\psk@Die@CY)} \FPeval\coteFive{(-\psk@Die@Side)*(\Mthreethree)+(\psk@Die@CZ)} \FPeval\abscisseSix{(\psk@Die@Side)*(\Monethree)+(\psk@Die@CX)} \FPeval\ordonneeSix{(\psk@Die@Side)*(\Mtwothree)+(\psk@Die@CY)} \FPeval\coteSix{(\psk@Die@Side)*(\Mthreethree)+(\psk@Die@CZ)} } % \def\CoordinatesSummit{% \FPeval\abscisseA{((\psk@Die@Side)*(\Moneone)) + ((\psk@Die@Side)*(\Monetwo)) + ((\psk@Die@Side)*(\Monethree))+(\psk@Die@CX)} \FPeval\ordonneeA{((\psk@Die@Side)*(\Mtwoone)) + ((\psk@Die@Side)*(\Mtwotwo)) + ((\psk@Die@Side)*(\Mtwothree))+(\psk@Die@CY)} \FPeval\coteA{((\psk@Die@Side)*(\Mthreeone)) + ((\psk@Die@Side)*(\Mthreetwo)) + ((\psk@Die@Side)*(\Mthreethree))+(\psk@Die@CZ)} % \FPeval\abscisseB{(\psk@Die@Side)*(\Moneone)+ (-\psk@Die@Side)*(\Monetwo) + (\psk@Die@Side)*(\Monethree)+(\psk@Die@CX)} \FPeval\ordonneeB{(\psk@Die@Side)*(\Mtwoone) + (-\psk@Die@Side)*(\Mtwotwo) + (\psk@Die@Side)*(\Mtwothree)+(\psk@Die@CY)} \FPeval\coteB{(\psk@Die@Side)*(\Mthreeone) + (-\psk@Die@Side)*(\Mthreetwo) + (\psk@Die@Side)*(\Mthreethree)+(\psk@Die@CZ)} % \FPeval\abscisseC{(\psk@Die@Side)*(\Moneone) + (-\psk@Die@Side)*(\Monetwo) + (-\psk@Die@Side)*(\Monethree)+(\psk@Die@CX)} \FPeval\ordonneeC{(\psk@Die@Side)*(\Mtwoone) + (-\psk@Die@Side)*(\Mtwotwo)+ (-\psk@Die@Side)*(\Mtwothree)+(\psk@Die@CY)} \FPeval\coteC{(\psk@Die@Side)*(\Mthreeone) + (-\psk@Die@Side)*(\Mthreetwo) + (-\psk@Die@Side)*(\Mthreethree)+(\psk@Die@CZ)} % \FPeval\abscisseD{(\psk@Die@Side)*(\Moneone) + (\psk@Die@Side)*(\Monetwo) + (-\psk@Die@Side)*(\Monethree)+(\psk@Die@CX)} \FPeval\ordonneeD{(\psk@Die@Side)*(\Mtwoone) + (\psk@Die@Side)*(\Mtwotwo) + (-\psk@Die@Side)*(\Mtwothree)+(\psk@Die@CY)} \FPeval\coteD{(\psk@Die@Side)*(\Mthreeone) + (\psk@Die@Side)*(\Mthreetwo) + (-\psk@Die@Side)*(\Mthreethree)+(\psk@Die@CZ)} % \FPeval\abscisseE{(-\psk@Die@Side)*(\Moneone) + (\psk@Die@Side)*(\Monetwo)+ (\psk@Die@Side)*(\Monethree)+(\psk@Die@CX)} \FPeval\ordonneeE{(-\psk@Die@Side)*(\Mtwoone) + (\psk@Die@Side)*(\Mtwotwo)+ (\psk@Die@Side)*(\Mtwothree)+(\psk@Die@CY)} \FPeval\coteE{(-\psk@Die@Side)*(\Mthreeone) + (\psk@Die@Side)*(\Mthreetwo) + (\psk@Die@Side)*(\Mthreethree)+(\psk@Die@CZ)} % \FPeval\abscisseF{(-\psk@Die@Side)*(\Moneone) + (-\psk@Die@Side)*(\Monetwo) + (\psk@Die@Side)*(\Monethree)+(\psk@Die@CX)} \FPeval\ordonneeF{(-\psk@Die@Side)*(\Mtwoone) + (-\psk@Die@Side)*(\Mtwotwo) + (\psk@Die@Side)*(\Mtwothree)+(\psk@Die@CY)} \FPeval\coteF{(-\psk@Die@Side)*(\Mthreeone) + (-\psk@Die@Side)*(\Mthreetwo) + (\psk@Die@Side)*(\Mthreethree)+(\psk@Die@CZ)} % \FPeval\abscisseG{(-\psk@Die@Side)*(\Moneone) + (-\psk@Die@Side)*(\Monetwo) + (-\psk@Die@Side)*(\Monethree)+(\psk@Die@CX)} \FPeval\ordonneeG{(-\psk@Die@Side)*(\Mtwoone) + (-\psk@Die@Side)*(\Mtwotwo) + (-\psk@Die@Side)*(\Mtwothree)+(\psk@Die@CY)} \FPeval\coteG{(-\psk@Die@Side)*(\Mthreeone) + (-\psk@Die@Side)*(\Mthreetwo) + (-\psk@Die@Side)*(\Mthreethree)+(\psk@Die@CZ)} % \FPeval\abscisseH{(-\psk@Die@Side)*(\Moneone) + (\psk@Die@Side)*(\Monetwo) + (-\psk@Die@Side)*(\Monethree)+(\psk@Die@CX)} \FPeval\ordonneeH{(-\psk@Die@Side)*(\Mtwoone) + (\psk@Die@Side)*(\Mtwotwo) + (-\psk@Die@Side)*(\Mtwothree)+(\psk@Die@CY)} \FPeval\coteH{(-\psk@Die@Side)*(\Mthreeone) + (\psk@Die@Side)*(\Mthreetwo) + (-\psk@Die@Side)*(\Mthreethree)+(\psk@Die@CZ)} } \def\TestVisibilitySide{% \FPeval\VisibilityFaceOne{((\abscisseOne)-(\psk@Die@CX))*((\xObs)-(\abscisseOne)) + ((\ordonneeOne)-(\psk@Die@CY))*((\yObs)-(\ordonneeOne)) + ((\coteOne)-(\psk@Die@CZ))*((\zObs)-(\coteOne))} \FPeval\VisibilityFaceTwo{((\abscisseTwo)-(\psk@Die@CX))*((\xObs)-(\abscisseTwo)) + ((\ordonneeTwo)-(\psk@Die@CY))*((\yObs)-(\ordonneeTwo)) + ((\coteTwo)-(\psk@Die@CZ))*((\zObs)-(\coteTwo))} \FPeval\VisibilityFaceThree{((\abscisseThree)-(\psk@Die@CX))*((\xObs)-(\abscisseThree)) + ((\ordonneeThree)-(\psk@Die@CY))*((\yObs)-(\ordonneeThree)) + ((\coteThree)-(\psk@Die@CZ))*((\zObs)-(\coteThree))} \FPeval\VisibilityFaceFour{((\abscisseFour)-(\psk@Die@CX))*((\xObs)-(\abscisseFour)) + ((\ordonneeFour)-(\psk@Die@CY))*((\yObs)-(\ordonneeFour)) + ((\coteFour)-(\psk@Die@CZ))*((\zObs)-(\coteFour))} \FPeval\VisibilityFaceFive{((\abscisseFive)-(\psk@Die@CX))*((\xObs)-(\abscisseFive)) + ((\ordonneeFive)-(\psk@Die@CY))*((\yObs)-(\ordonneeFive)) + ((\coteFive)-(\psk@Die@CZ))*((\zObs)-(\coteFive))} \FPeval\VisibilityFaceSix{((\abscisseSix)-(\psk@Die@CX))*((\xObs)-(\abscisseSix)) + ((\ordonneeSix)-(\psk@Die@CY))*((\yObs)-(\ordonneeSix)) + ((\coteSix)-(\psk@Die@CZ))*((\zObs)-(\coteSix))}} % \def\TestVisibilitySummit{% \FPeval\VisibilitySummitA{((\abscisseA)-(\psk@Die@CX))*((\xObs)-(\abscisseA)) + ((\ordonneeA)-(\psk@Die@CY))*((\yObs)-(\ordonneeA)) + ((\coteA)-(\psk@Die@CZ))*((\zObs)-(\coteA))} \FPeval\VisibilitySummitB{((\abscisseB)-(\psk@Die@CX))*((\xObs)-(\abscisseB)) + ((\ordonneeB)-(\psk@Die@CY))*((\yObs)-(\ordonneeB)) + ((\coteB)-(\psk@Die@CZ))*((\zObs)-(\coteB))} \FPeval\VisibilitySummitC{((\abscisseC)-(\psk@Die@CX))*((\xObs)-(\abscisseC)) + ((\ordonneeC)-(\psk@Die@CY))*((\yObs)-(\ordonneeC)) + ((\coteC)-(\psk@Die@CZ))*((\zObs)-(\coteC))} \FPeval\VisibilitySummitD{((\abscisseD)-(\psk@Die@CX))*((\xObs)-(\abscisseD)) + ((\ordonneeD)-(\psk@Die@CY))*((\yObs)-(\ordonneeD)) + ((\coteD)-(\psk@Die@CZ))*((\zObs)-(\coteD))} \FPeval\VisibilitySummitE{((\abscisseE)-(\psk@Die@CX))*((\xObs)-(\abscisseE)) + ((\ordonneeE)-(\psk@Die@CY))*((\yObs)-(\ordonneeE)) + ((\coteE)-(\psk@Die@CZ))*((\zObs)-(\coteE))} \FPeval\VisibilitySummitF{((\abscisseF)-(\psk@Die@CX))*((\xObs)-(\abscisseF)) + ((\ordonneeF)-(\psk@Die@CY))*((\yObs)-(\ordonneeF)) + ((\coteF)-(\psk@Die@CZ))*((\zObs)-(\coteF))} \FPeval\VisibilitySummitG{((\abscisseG)-(\psk@Die@CX))*((\xObs)-(\abscisseG)) + ((\ordonneeG)-(\psk@Die@CY))*((\yObs)-(\ordonneeG)) + ((\coteG)-(\psk@Die@CZ))*((\zObs)-(\coteG))} \FPeval\VisibilitySummitH{((\abscisseH)-(\psk@Die@CX))*((\xObs)-(\abscisseH)) + ((\ordonneeH)-(\psk@Die@CY))*((\yObs)-(\ordonneeH)) + ((\coteH)-(\psk@Die@CZ))*((\zObs)-(\coteH))}} % \def\formulesIIID{% /xObservateur abscisse Sin1 mul neg ordonnee Cos1 mul add def /yObservateur abscisse Cos1Sin2 mul neg ordonnee Sin1Sin2 mul sub cote Cos2 mul add def /zObservateur abscisse neg Cos1Cos2 mul ordonnee Sin1Cos2 mul sub cote Sin2 mul sub Dobs add def /xScreen DScreen xObservateur mul zObservateur div def /yScreen DScreen yObservateur mul zObservateur div def xScreen yScreen} % les sommets \def\sommets{ \pnode(! /abscisse1 Side def /ordonnee1 Side K mul def /cote1 Side def \MatriceRot \formulesIIID){A1} \pnode(! /abscisse1 Side def /ordonnee1 Side K neg mul def /cote1 Side def \MatriceRot \formulesIIID){B1} \pnode(! /abscisse1 Side def /ordonnee1 Side neg def /cote1 Side K mul def \MatriceRot \formulesIIID){C1} \pnode(! /abscisse1 Side def /ordonnee1 Side neg def /cote1 Side K neg mul def \MatriceRot \formulesIIID){D1} \pnode(! /abscisse1 Side def /ordonnee1 Side K mul neg def /cote1 Side neg def \MatriceRot \formulesIIID){E1} \pnode(! /abscisse1 Side def /ordonnee1 Side K mul def /cote1 Side neg def \MatriceRot \formulesIIID){F1} \pnode(! /abscisse1 Side def /ordonnee1 Side def /cote1 Side K mul neg def \MatriceRot \formulesIIID){G1} \pnode(! /abscisse1 Side def /ordonnee1 Side def /cote1 Side K mul def \MatriceRot \formulesIIID){H1} \pnode(! /abscisse1 Side neg def /ordonnee1 Side K mul def /cote1 Side def \MatriceRot \formulesIIID){A2} \pnode(! /abscisse1 Side neg def /ordonnee1 Side K neg mul def /cote1 Side def \MatriceRot \formulesIIID){B2} \pnode(! /abscisse1 Side neg def /ordonnee1 Side neg def /cote1 Side K mul def \MatriceRot \formulesIIID){C2} \pnode(! /abscisse1 Side neg def /ordonnee1 Side neg def /cote1 Side K neg mul def \MatriceRot \formulesIIID){D2} \pnode(! /abscisse1 Side neg def /ordonnee1 Side K mul neg def /cote1 Side neg def \MatriceRot \formulesIIID){E2} \pnode(! /abscisse1 Side neg def /ordonnee1 Side K mul def /cote1 Side neg def \MatriceRot \formulesIIID){F2} \pnode(! /abscisse1 Side neg def /ordonnee1 Side def /cote1 Side K mul neg def \MatriceRot \formulesIIID){G2} \pnode(! /abscisse1 Side neg def /ordonnee1 Side def /cote1 Side K mul def \MatriceRot \formulesIIID){H2} \pnode(! /abscisse1 Side K mul def /ordonnee1 Side def /cote1 Side def \MatriceRot \formulesIIID){I1} \pnode(! /abscisse1 Side K neg mul def /ordonnee1 Side def /cote1 Side def \MatriceRot \formulesIIID){J1} \pnode(! /abscisse1 Side K mul neg def /ordonnee1 Side neg def /cote1 Side def \MatriceRot \formulesIIID){K1} \pnode(! /abscisse1 Side K mul def /ordonnee1 Side neg def /cote1 Side def \MatriceRot \formulesIIID){L1} \pnode(! /abscisse1 Side K mul def /ordonnee1 Side def /cote1 Side neg def \MatriceRot \formulesIIID){I2} \pnode(! /abscisse1 Side K neg mul def /ordonnee1 Side def /cote1 Side neg def \MatriceRot \formulesIIID){J2} \pnode(! /abscisse1 Side K mul neg def /ordonnee1 Side neg def /cote1 Side neg def \MatriceRot \formulesIIID){K2} \pnode(! /abscisse1 Side K mul def /ordonnee1 Side neg def /cote1 Side neg def \MatriceRot \formulesIIID){L2} % les sommets du cube initial \pnode(! /abscisse1 Side def /ordonnee1 Side def /cote1 Side def \MatriceRot \formulesIIID){A} \pnode(! /abscisse1 Side def /ordonnee1 Side neg def /cote1 Side def \MatriceRot \formulesIIID){B} \pnode(! /abscisse1 Side def /ordonnee1 Side neg def /cote1 Side neg def \MatriceRot \formulesIIID){C} \pnode(! /abscisse1 Side def /ordonnee1 Side def /cote1 Side neg def \MatriceRot \formulesIIID){D} \pnode(! /abscisse1 Side neg def /ordonnee1 Side def /cote1 Side def \MatriceRot \formulesIIID){E} \pnode(! /abscisse1 Side neg def /ordonnee1 Side neg def /cote1 Side def \MatriceRot \formulesIIID){F} \pnode(! /abscisse1 Side neg def /ordonnee1 Side neg def /cote1 Side neg def \MatriceRot \formulesIIID){G} \pnode(! /abscisse1 Side neg def /ordonnee1 Side def /cote1 Side neg def \MatriceRot \formulesIIID){H} } % les coins \def\coinA{% \pscustom[style=side]{% Denis Girou \pspolygon[fillstyle=solid,fillcolor=yellow](A1)(H1)(I1)}} \def\coinE{% \pscustom[style=side]{% D.G. \pspolygon[fillstyle=solid,fillcolor=yellow](J1)(A2)(H2)}} \def\coinH{% \pscustom[style=side]{% D.G. \pspolygon[fillstyle=solid,fillcolor=yellow](J2)(F2)(G2)}} \def\coinD{% \pscustom[style=side]{% D.G. \pspolygon[fillstyle=solid,fillcolor=yellow](F1)(I2)(G1)}} \def\coinB{% \pscustom[style=side]{% D.G. \pspolygon[fillstyle=solid,fillcolor=yellow](L1)(B1)(C1)}} \def\coinF{% \pscustom[style=side]{% D.G. \pspolygon[fillstyle=solid,fillcolor=yellow](B2)(K1)(C2)}} \def\coinG{% \pscustom[style=side]{% D.G. \pspolygon[fillstyle=solid,fillcolor=yellow](D2)(E2)(K2)}} \def\coinC{% \pscustom[style=side]{% D.G. \pspolygon[fillstyle=solid,fillcolor=yellow](D1)(L2)(E1)}} % % \def\Cube{% \sommets % face 1 \FPifpos\VisibilityFaceOne \pscustom[style=Side]{% Denis Girou \pspolygon[style=Side](A1)(B1)(C1)(D1)(E1)(F1)(G1)(H1)} \parametricplot[style=points]{0}{360}{% /ordonnee1 t cos Point mul def /cote1 t sin Point mul def /abscisse1 Side def \MatriceRot \formulesIIID} \fi % face number 3 \FPifpos\VisibilityFaceTwo \pscustom[style=Side]{% D.G. \pspolygon[style=Side](H1)(I1)(J1)(H2)(G2)(J2)(I2)(G1)} \parametricplot[style=points]{0}{360}{% /abscisse1 t cos Point mul def /cote1 t sin Point mul def /ordonnee1 Side def \MatriceRot \formulesIIID} \parametricplot[style=points]{0}{360}{% /abscisse1 t cos Point mul Side 2 div sub def /cote1 t sin Point mul Side 2 div add def /ordonnee1 Side def \MatriceRot \formulesIIID} \parametricplot[style=points]{0}{360}{% /abscisse1 t cos Point mul Side 2 div add def /cote1 t sin Point mul Side 2 div sub def /ordonnee1 Side def \MatriceRot \formulesIIID} \fi % face number 4 \FPifpos\VisibilityFaceFour \pscustom[style=Side]{% D.G. \pspolygon[style=Side](L1)(C1)(D1)(L2)(K2)(D2)(C2)(K1)} \parametricplot[style=points]{0}{360}{% /abscisse1 t cos Point mul Side 2 div sub def /cote1 t sin Point mul Side 2 div add def /ordonnee1 Side neg def \MatriceRot \formulesIIID} \parametricplot[style=points]{0}{360}{% /abscisse1 t cos Point mul Side 2 div add def /cote1 t sin Point mul Side 2 div sub def /ordonnee1 Side neg def \MatriceRot \formulesIIID} \parametricplot[style=points]{0}{360}{% /abscisse1 t cos Point mul Side 2 div sub def /cote1 t sin Point mul Side 2 div sub def /ordonnee1 Side neg def \MatriceRot \formulesIIID} \parametricplot[style=points]{0}{360}{% /abscisse1 t cos Point mul Side 2 div add def /cote1 t sin Point mul Side 2 div add def /ordonnee1 Side neg def \MatriceRot \formulesIIID} \fi % face 6 \FPifpos\VisibilityFaceThree \pscustom[style=Side]{% D.G. \pspolygon[style=Side](A2)(B2)(C2)(D2)(E2)(F2)(G2)(H2)} \parametricplot[style=points]{0}{360}{% /ordonnee1 t cos Point mul Side 2 div add def /cote1 t sin Point mul Side 2 div add def /abscisse1 Side neg def \MatriceRot \formulesIIID} \parametricplot[style=points]{0}{360}{% /ordonnee1 t cos Point mul Side 2 div add def /cote1 t sin Point mul Side 2 div sub def /abscisse1 Side neg def \MatriceRot \formulesIIID} \parametricplot[style=points]{0}{360}{% /ordonnee1 t cos Point mul Side 2 div sub def /cote1 t sin Point mul Side 2 div add def /abscisse1 Side neg def \MatriceRot \formulesIIID} \parametricplot[style=points]{0}{360}{% /ordonnee1 t cos Point mul Side 2 div sub def /cote1 t sin Point mul Side 2 div sub def /abscisse1 Side neg def \MatriceRot \formulesIIID} \parametricplot[style=points]{0}{360}{% /ordonnee1 t cos Point mul def /cote1 t sin Point mul Side 2 div sub def /abscisse1 Side neg def \MatriceRot \formulesIIID} \parametricplot[style=points]{0}{360}{% /ordonnee1 t cos Point mul def /cote1 t sin Point mul Side 2 div add def /abscisse1 Side neg def \MatriceRot \formulesIIID} \fi % face 2 \FPifpos\VisibilityFaceSix \pscustom[style=Side]{% D.G. \pspolygon[style=Side](A1)(I1)(J1)(A2)(B2)(K1)(L1)(B1)} \parametricplot[style=points]{0}{360}{% /cote1 Side def /ordonnee1 t sin Point mul Side 2 div sub def /abscisse1 t cos Point mul Side 2 div sub def \MatriceRot \formulesIIID} \parametricplot[style=points]{0}{360}{% /cote1 Side def /ordonnee1 t sin Point mul Side 2 div add def /abscisse1 t cos Point mul Side 2 div add def \MatriceRot \formulesIIID} \fi % face number 3 \FPifpos\VisibilityFaceTwo \pscustom[style=Side]{% D.G. \pspolygon[style=Side](H1)(I1)(J1)(H2)(G2)(J2)(I2)(G1) } \parametricplot[style=points]{0}{360}{% /abscisse1 t cos Point mul def /cote1 t sin Point mul def /ordonnee1 Side def \MatriceRot \formulesIIID} \parametricplot[style=points]{0}{360}{% /abscisse1 t cos Point mul Side 2 div sub def /cote1 t sin Point mul Side 2 div add def /ordonnee1 Side def \MatriceRot \formulesIIID} \parametricplot[style=points]{0}{360}{% /abscisse1 t cos Point mul Side 2 div add def /cote1 t sin Point mul Side 2 div sub def /ordonnee1 Side def \MatriceRot \formulesIIID} \fi % face 5 \FPifpos\VisibilityFaceFive \pscustom[style=Side]{% D.G. \pspolygon[style=Side](F1)(I2)(J2)(F2)(E2)(K2)(L2)(E1)} \parametricplot[style=points]{0}{360}{% /abscisse1 t cos Point mul Side 2 div sub def /ordonnee1 t sin Point mul Side 2 div add def /cote1 Side neg def \MatriceRot \formulesIIID} \parametricplot[style=points]{0}{360}{% /abscisse1 t cos Point mul Side 2 div add def /ordonnee1 t sin Point mul Side 2 div sub def /cote1 Side neg def \MatriceRot \formulesIIID} \parametricplot[style=points]{0}{360}{% /abscisse1 t cos Point mul Side 2 div sub def /ordonnee1 t sin Point mul Side 2 div sub def /cote1 Side neg def \MatriceRot \formulesIIID} \parametricplot[style=points]{0}{360}{% /abscisse1 t cos Point mul Side 2 div add def /ordonnee1 t sin Point mul Side 2 div add def /cote1 Side neg def \MatriceRot \formulesIIID} \parametricplot[style=points]{0}{360}{% /abscisse1 t cos Point mul def /ordonnee1 t sin Point mul def /cote1 Side neg def \MatriceRot \formulesIIID} \fi \FPifpos\VisibilitySummitA \coinA \fi \FPifpos\VisibilitySummitB \coinB \fi \FPifpos\VisibilitySummitC \coinC \fi \FPifpos\VisibilitySummitD \coinD \fi \FPifpos\VisibilitySummitE \coinE \fi \FPifpos\VisibilitySummitF \coinF \fi \FPifpos\VisibilitySummitG \coinG \fi \FPifpos\VisibilitySummitH \coinH \fi } %%%%%%%%%%%% % %%%%%%%%%%% % \def\Sol{\def\pst@par{}\pst@object{Sol}} \def\Sol@i{{% \begin@SpecialObj \pnodeIIID(-10,-10,-\psk@Die@Side){A} \pnodeIIID(-10,10,-\psk@Die@Side){B} \pnodeIIID(10,10,-\psk@Die@Side){C} \pnodeIIID(10,-10,-\psk@Die@Side){D} \pspolygon[style=sol](A)(B)(C)(D) \multido{\iY=-10+2,\iX=-10+2}{10}{ \pnodeIIID(-10,\iY,-\psk@Die@Side){A} \pnodeIIID(10,\iY,-\psk@Die@Side){B} \psline[linecolor=red](A)(B) \pnodeIIID(\iX,-10,-\psk@Die@Side){C} \pnodeIIID(\iX,10,-\psk@Die@Side){D} \psline[linecolor=red](C)(D) \pnodeIIID(-10,\iY,-\psk@Die@Side){C} \pnodeIIID(10,\iY,-\psk@Die@Side){D} \psline[linecolor=blue](C)(D) } \end@SpecialObj }} % % \def\CalculsTeX{% \FPeval{\ThetaObsRadian}{(\psk@IIID@Theta) * (\FPpi/180)} \FPeval{\PhiObsRadian}{(\psk@IIID@Phi) * \FPpi/180} \FPcos{\CosThetaObs}{\ThetaObsRadian} \FPsin{\SinThetaObs}{\ThetaObsRadian} \FPcos{\CosPhiObs}{\PhiObsRadian} \FPsin{\SinPhiObs}{\PhiObsRadian} \FPeval{\xObs}{\psk@IIID@Dobs*\CosThetaObs*\CosPhiObs} \FPeval{\yObs}{\psk@IIID@Dobs*\SinThetaObs*\CosPhiObs} \FPeval{\zObs}{\psk@IIID@Dobs*\SinPhiObs} } % \def\Axes{% \pnodeIIID(0,0,-\psk@Die@Side){O} \pnodeIIID(0,10,-\psk@Die@Side){Y} \pnodeIIID(10,0,-\psk@Die@Side){X} \pnodeIIID(0,0,10){Z} \bgroup \psset{linestyle=dashed,arrowsize=0.2} \psline{->}(O)(X) \psline{->}(O)(Y) \psline{->}(O)(Z) \egroup \uput[90](X){$x$} \uput[90](Y){$y$} \uput[90](Z){$z$} \uput[270](O){O} } \makeatother \newpsstyle{sol}{fillstyle=vlines,hatchcolor=green,hatchwidth=0.2\pslinewidth,hatchsep=1\pslinewidth} \pagestyle{empty} \psset{dimen=middle} \newcount\diex \newcount\diey \newdimen{\diez} \newcount\CY \newcount\CX \newdimen{\vuePhi} \newdimen{\vueTheta} % \makeatletter % \define@key[psset]{pst-die}{randomi1}{\edef\psk@ThreeDies@randomiDieA{#1}} \define@key[psset]{pst-die}{randomi2}{\edef\psk@ThreeDies@randomiDieB{#1}} \define@key[psset]{pst-die}{randomi3}{\edef\psk@ThreeDies@randomiDieC{#1}} % \psset{randomi1=182048360,randomi2=17483647,randomi3=568003} \def\ThreeDies{\def\pst@par{}\pst@object{ThreeDies}} \def\ThreeDies@i{{% \begin@SpecialObj \begin{pspicture}(-5,-5)(5,5) \randomi=\psk@ThreeDies@randomiDieA \setrannum{\diex}{-2}{2} \setrannum{\diey}{-2}{2} \setrannum{\CX}{-8}{8} \setrannum{\CY}{-8}{-6} \setrandim{\diez}{0pt}{360pt} \setrandim{\vuePhi}{10pt}{80pt} \setrandim{\vueTheta}{0pt}{90pt} \FPeval\ithetax{(\the\diex)*(90)} \FPeval\ithetay{(\the\diey)*(90)} \psset{thetax=\ithetax,thetay=\ithetay,thetaz={\pointless\diez},% PHI={\pointless\vuePhi},THETA={\pointless\vueTheta}} \Die[carpet=true,CX={\the\CX},CY={\the\CY}] \randomi=\psk@ThreeDies@randomiDieB \setrannum{\diex}{-2}{2} \setrannum{\diey}{-2}{2} \setrannum{\CX}{-8}{-2} \setrannum{\CY}{-3}{8} \setrandim{\diez}{0pt}{360pt} \FPeval\ithetax{(\the\diex)*(90)} \FPeval\ithetay{(\the\diey)*(90)} \psset{thetax=\ithetax,thetay=\ithetay,thetaz={\pointless\diez}} \Die[CX={\the\CX},CY={\the\CY}] \randomi=\psk@ThreeDies@randomiDieC \setrannum{\diex}{-2}{2} \setrannum{\diey}{-2}{2} \setrannum{\CX}{2}{8} \setrannum{\CY}{2}{8} \setrandim{\diez}{0pt}{360pt} \FPeval\ithetax{(\the\diex)*(90)} \FPeval\ithetay{(\the\diey)*(90)} \psset{thetax=\ithetax,thetay=\ithetay,thetaz={\pointless\diez}} \Die[CX={\the\CX},CY={\the\CY}] \end{pspicture} \end@SpecialObj }} \makeatother \begin{document} \input{random_dices.tex} \end{document}
Un script Perl produit une nouvelle image à intervalles aléatoires sur notre site web:
#!/usr/bin/perl use strict ; use warnings ; ## Ne pas dépasser 2^31-1=2147483647, pour chaque valeur, ## voir la doc de ramdom.tex my $seed1 = int rand(2**31) ; my $seed2 = int rand(2**31) ; my $seed3 = int rand(2**31) ; open( RANDOM_DICES, '>random_dices.tex' ) or die "Cannot create file random_dices.tex" ; print RANDOM_DICES qq#\\ThreeDies[randomi1=${seed1},randomi2=${seed2},randomi3=${seed3}]\n# ; close( RANDOM_DICES ) or die "Cannot write file random_dices.tex" ; system( 'latex dices.tex > dices.latex_out 2> dices.latex_err' ) ; system( 'dvips dices.dvi > dices.dvips_out 2> dices.dvips_err' ) ; system( '/usr/bin/convert -density 60 -trim -transparent "#FFFFFF" dices.ps dices.png > dices.convert_out 2> dices.convert_err' ) ; exit ;
Nous employons une équipe d'une trentaine de canards pour assurer la sécurité du site web. Ils utilisent le package TikZducks. Un script Perl assure leur rotation aléatoire.
\documentclass[14pt,oneside]{extarticle} \usepackage[latin1]{inputenc} \usepackage[T1]{fontenc} \usepackage[upright]{fourier} \usepackage{tikz} \usetikzlibrary{ducks} \usepackage[french]{babel} \pagestyle{empty} \begin{document} \definecolor{carrot}{HTML}{f4661b} \begin{tikzpicture} \draw (0,0) pic[duck/water=carrot, duck/laughing, duck/signpost=\TeX{} ] {duck} ; \end{tikzpicture} \end{document}