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,