1 \section{L'option \texttt{transform}}
3 Avec l'option \Cadre{transform=\ldots}, c'est une formule de
4 transformation de \textbf{R}$^\textbf 3$ vers \textbf{R}$^\textbf 3$
5 qui va être appliquée à chaque point du solide.
6 Dans ce premier exemple, l'objet qui subira la transformation est un
7 cube. Le cube de référence est en jaune,
8 le cube transformé en vert et le cube en fil de fer représente le cube
11 \subsection{Facteur d'échelle identique appliqué aux trois
14 Le facteur d'échelle est pris égal à $0.5$. On l'introduit soit en
15 définissant la variable `\texttt{/Facteur}' :
17 \pstVerb{/Facteur {.5 mulv3d} def}%
19 puis en l'introduisant dans l'option `\texttt{transform}' :
22 \psSolid[object=cube,a=2,ngrid=3,
23 transform=Facteur](2,0,1)%
26 soit directement dans le code :
29 \psSolid[object=cube,a=2,ngrid=3,
30 transform={.5 mulv3d}](2,0,1)%
34 \textbf{Remarque~:} On vient d'utiliser ici un raccourci jps pour
35 définir une fonction de de \textbf{R}$^\textbf 3$ vers
36 \textbf{R}$^\textbf 3$. Une autre méthode aurait été d'utiliser le
39 \defFunction[algebraic]{matransformation}(x,y,z)
44 puis de transmettre dans les options
45 \Cadre{[transform=matransformation]}.
46 \begin{LTXexample}[pos=t]
47 \psset{viewpoint=20 60 20 rtp2xyz,lightsrc=10 15 7,Decran=20}
48 \begin{pspicture}(-5,-5)(6,5)
50 \psSolid[object=grille,base=-4 4 -4 4,fillcolor=red!50]%
51 \axesIIID(0,0,0)(4,4,4)%
52 \psSolid[object=cube,fillcolor=yellow!50,
54 \psSolid[object=cube,fillcolor=green!50,
55 a=2,transform={.5 mulv3d},
63 \Cadre{Le facteur d'échelle s'applique aussi aux coordonnées de la
64 position du centre du cube.}
66 \subsection{Facteur d'échelle différent pour les trois coordonnées}
68 Prenons, par exemple, que l'on applique un facteur de 0.75 pour $x$, 4
69 pour $y$ et 0.5 pour $z$, on transforme ainsi un cube en un
70 parallélépipède en utilisant la fonction \textbf{scaleOpoint3d} de la
72 \begin{LTXexample}[pos=t]
73 \psset{viewpoint=20 60 20 rtp2xyz,lightsrc=10 15 7,Decran=20}
74 \begin{pspicture}(-5,-5)(6,5)
76 \psSolid[object=grille,base=-4 4 -4 4,fillcolor=red!50]%
77 \axesIIID(0,0,0)(4,4,4)%
81 a=2,transform={.75 4 .5 scaleOpoint3d},
89 \subsection{Transformation liée à la distance du point à l'origine}
91 Un exemple que l'on va appliquer à un cube :
94 \left\lbrace\begin{aligned}
95 x'&=\big(0.5\sqrt{x^2+y^2+z^2}+1-0.5\sqrt{3}\big)x \\
96 y'&=\big(0.5\sqrt{x^2+y^2+z^2}+1-0.5\sqrt{3}\big)y \\
97 z'&=\big(0.5\sqrt{x^2+y^2+z^2}+1-0.5\sqrt{3}\big)z
101 \begin{LTXexample}[pos=t]
102 \begin{pspicture}(-3,-4)(3,3)
103 \psset{viewpoint=20 60 20 rtp2xyz,lightsrc=10 15 7,Decran=20}
109 /b 1 a 3 sqrt mul sub def
110 /k M norme3d a mul b add def
114 \psframe*(-3,-4)(3,3)
115 \psset{linewidth=.02,linecolor=gray}
116 \psSolid[object=cube,a=3,ngrid=9,
122 \subsection{Torsion d'une poutre}
124 Le solide de départ est un prisme de hauteur 10 cm de 20 étages
125 (\texttt{ngrid=20 2}). À chaque étage, on applique une rotation
127 d'axe $Oz$ et de valeur 10$^{\mathrm{o}}$ par exemple. Comme les
128 niveaux sont espacés de $0,5$~cm, on multiplie $z\times20$.
130 \begin{LTXexample}[pos=t]
131 \psset{viewpoint=50 50 20 rtp2xyz,lightsrc=25 37 17,Decran=50,unit=0.75}
132 \begin{pspicture}(-3,-1)(3.5,10)
133 \psframe(-3,-1)(3,10)
134 \psSolid[object=grille,base=-2 2 -2 2,ngrid=8]%
135 \psSolid[object=prisme,h=10,ngrid=20 2,
136 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]%
138 \begin{pspicture}(-3.5,-1)(3,10)
139 \psframe(-3,-1)(3,10)
140 \psSolid[object=grille,base=-2 2 -2 2,ngrid=8]%
144 /M defpoint3d % on récupère les coordonnées
145 M /z exch def pop pop
146 % on tourne de 10 degrés à chaque niveau
147 M 0 0 z 20 mul rotateOpoint3d
149 \psSolid[object=prisme,h=10,ngrid=20 2,
150 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,