diff options
Diffstat (limited to 'Master/texmf-dist/doc/generic/pst-solides3d/doc/par-transform.tex')
-rw-r--r-- | Master/texmf-dist/doc/generic/pst-solides3d/doc/par-transform.tex | 153 |
1 files changed, 153 insertions, 0 deletions
diff --git a/Master/texmf-dist/doc/generic/pst-solides3d/doc/par-transform.tex b/Master/texmf-dist/doc/generic/pst-solides3d/doc/par-transform.tex new file mode 100644 index 00000000000..6275861870c --- /dev/null +++ b/Master/texmf-dist/doc/generic/pst-solides3d/doc/par-transform.tex @@ -0,0 +1,153 @@ +\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} |