summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/doc/generic/pst-solides3d/doc/par-transform.tex
diff options
context:
space:
mode:
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.tex153
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}