Retour

par-transform.tex

Télécharger le fichier
\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 et flexion 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$.
 
La flexion est envisagée dans le plan $xOz$ sous l'action d'une force perpendiculaire à la poutre appliquée en son extrémité.
 
\begin{LTXexample}[pos=t]
\psset{viewpoint=100 50 20 rtp2xyz,lightsrc=viewpoint,Decran=100,unit=0.75}
\begin{pspicture}(-3,-1)(3.5,11)
\psframe(-3,-1)(3.5,11)
\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,-1)(3.5,11)
\psframe(-3,-1)(3.5,11)
\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 suivant l'axe Oz à 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]%
\psTransformPoint[RotZ=20](2 0 10)(0,0,0){A}
\psTransformPoint[RotZ=20](2 1 10)(0,0,0){A'}
\psTransformPoint[RotZ=20](-2 0 10)(0,0,0){B}
\psTransformPoint[RotZ=20](-2 -1 10)(0,0,0){B'}
\psline[linecolor=red]{v-v}(A')(A)(B)(B')
\end{pspicture}
\begin{pspicture}(-3.5,-1)(3,11)
\psframe(-3.5,-1)(3,11)
\psSolid[object=grille,base=-2 2 -2 2,ngrid=8]%
\pstVerb{
/flexion {%
2 dict begin
   /M defpoint3d % on récupère les coordonnées
   M /z exch def pop pop
   % on tourne de 2 degrés suivant l'axe Oy à chaque niveau
    M 0 z 2 mul 0 rotateOpoint3d
end} def}%
\axesIIID(0,0,0)(3,3,10)
\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=flexion]%
\psTransformPoint[RotY=20](0.5 0 10)(0,0,0){A}
\psPoint(3 20 cos mul 20 sin 10 mul add 0.5 add,0, 20 cos 10 mul 20 sin 3 mul sub){A'}
\psdot(A)
\psline[linecolor=red]{-v}(A)(A')
\end{pspicture}
\end{LTXexample}