\section{L'option \texttt{transform}} Avec l'option \Cadre{transform=\ldots}, c'est une formule de transformation de \textbf{R}$^\textbf 3$ vers \textbf{R}$^\textbf 3$ qui va être appliquée à chaque point du solide. Dans ce premier exemple, l'objet qui subira la transformation est un cube. Le cube de référence est en jaune, le cube transformé en vert et le cube en fil de fer représente le cube avant transformation. \subsection{Facteur d'échelle identique appliqué aux trois coordonnées} Le facteur d'échelle est pris égal à $0.5$. On l'introduit soit en définissant la variable `\texttt{/Facteur}' : \begin{verbatim} \pstVerb{/Facteur {.5 mulv3d} def}% \end{verbatim} puis en l'introduisant dans l'option `\texttt{transform}' : \begin{gbar} \begin{verbatim} \psSolid[object=cube,a=2,ngrid=3, transform=Facteur](2,0,1)% \end{verbatim} \end{gbar} soit directement dans le code : \begin{gbar} \begin{verbatim} \psSolid[object=cube,a=2,ngrid=3, transform={.5 mulv3d}](2,0,1)% \end{verbatim} \end{gbar} \textbf{Remarque~:} On vient d'utiliser ici un raccourci jps pour définir une fonction de de \textbf{R}$^\textbf 3$ vers \textbf{R}$^\textbf 3$. Une autre méthode aurait été d'utiliser le code \begin{verbatim} \defFunction[algebraic]{matransformation}(x,y,z) {.5*x} {.5*y} {.5*z} \end{verbatim} puis de transmettre dans les options \Cadre{[transform=matransformation]}. \begin{LTXexample}[pos=t] \psset{viewpoint=20 60 20 rtp2xyz,lightsrc=10 15 7,Decran=20} \begin{pspicture}(-5,-5)(6,5) \psframe(-5,-4)(6,5) \psSolid[object=grille,base=-4 4 -4 4,fillcolor=red!50]% \axesIIID(0,0,0)(4,4,4)% \psSolid[object=cube,fillcolor=yellow!50, a=2,ngrid=3](-2,0,1) \psSolid[object=cube,fillcolor=green!50, a=2,transform={.5 mulv3d}, ngrid=3](2,0,1) \psSolid[object=cube, action=draw, a=2,ngrid=3](2,0,1) \end{pspicture} \end{LTXexample} \Cadre{Le facteur d'échelle s'applique aussi aux coordonnées de la position du centre du cube.} \subsection{Facteur d'échelle différent pour les trois coordonnées} Prenons, par exemple, que l'on applique un facteur de 0.75 pour $x$, 4 pour $y$ et 0.5 pour $z$, on transforme ainsi un cube en un parallélépipède en utilisant la fonction \textbf{scaleOpoint3d} de la librairie jps. \begin{LTXexample}[pos=t] \psset{viewpoint=20 60 20 rtp2xyz,lightsrc=10 15 7,Decran=20} \begin{pspicture}(-5,-5)(6,5) \psframe(-5,-4)(6,5) \psSolid[object=grille,base=-4 4 -4 4,fillcolor=red!50]% \axesIIID(0,0,0)(4,4,4)% \psSolid[object=cube, a=2,ngrid=3](-2,0,1) \psSolid[object=cube, a=2,transform={.75 4 .5 scaleOpoint3d}, ngrid=3](2,0,1) \psSolid[object=cube, action=draw, a=2,ngrid=3](2,0,1) \end{pspicture} \end{LTXexample} \subsection{Transformation liée à la distance du point à l'origine} Un exemple que l'on va appliquer à un cube : \begin{equation*} \left\lbrace\begin{aligned} x'&=\big(0.5\sqrt{x^2+y^2+z^2}+1-0.5\sqrt{3}\big)x \\ y'&=\big(0.5\sqrt{x^2+y^2+z^2}+1-0.5\sqrt{3}\big)y \\ z'&=\big(0.5\sqrt{x^2+y^2+z^2}+1-0.5\sqrt{3}\big)z \end{aligned}\right. \end{equation*} \begin{LTXexample}[pos=t] \begin{pspicture}(-3,-4)(3,3) \psset{viewpoint=20 60 20 rtp2xyz,lightsrc=10 15 7,Decran=20} \pstVerb{ /gro { 4 dict begin /M defpoint3d /a .5 def /b 1 a 3 sqrt mul sub def /k M norme3d a mul b add def M k mulv3d end } def}% \psframe*(-3,-4)(3,3) \psset{linewidth=.02,linecolor=gray} \psSolid[object=cube,a=3,ngrid=9, transform=gro]% \end{pspicture} \end{LTXexample} %\newpage \subsection{Torsion d'une poutre} Le solide de départ est un prisme de hauteur 10 cm de 20 étages (\texttt{ngrid=20 2}). À chaque étage, on applique une rotation supplémentaire d'axe $Oz$ et de valeur 10$^{\mathrm{o}}$ par exemple. Comme les niveaux sont espacés de $0,5$~cm, on multiplie $z\times20$. \begin{LTXexample}[pos=t] \psset{viewpoint=50 50 20 rtp2xyz,lightsrc=25 37 17,Decran=50,unit=0.75} \begin{pspicture}(-3,-1)(3.5,10) \psframe(-3,-1)(3,10) \psSolid[object=grille,base=-2 2 -2 2,ngrid=8]% \psSolid[object=prisme,h=10,ngrid=20 2, base=0.5 0 0.5 0.5 0 0.5 -0.5 0.5 -0.5 0 -0.5 -0.5 0 -0.5 0.5 -0.5]% \end{pspicture} \begin{pspicture}(-3.5,-1)(3,10) \psframe(-3,-1)(3,10) \psSolid[object=grille,base=-2 2 -2 2,ngrid=8]% \pstVerb{ /torsion { 2 dict begin /M defpoint3d % on récupère les coordonnées M /z exch def pop pop % on tourne de 10 degrés à chaque niveau M 0 0 z 20 mul rotateOpoint3d end} def}% \psSolid[object=prisme,h=10,ngrid=20 2, base=0.5 0 0.5 0.5 0 0.5 -0.5 0.5 -0.5 0 -0.5 -0.5 0 -0.5 0.5 -0.5, transform=torsion]% \end{pspicture} \end{LTXexample}