diff options
Diffstat (limited to 'Master/texmf-dist/doc/generic/pst-solides3d/doc-en/par-section-en.tex')
-rw-r--r-- | Master/texmf-dist/doc/generic/pst-solides3d/doc-en/par-section-en.tex | 955 |
1 files changed, 955 insertions, 0 deletions
diff --git a/Master/texmf-dist/doc/generic/pst-solides3d/doc-en/par-section-en.tex b/Master/texmf-dist/doc/generic/pst-solides3d/doc-en/par-section-en.tex new file mode 100644 index 00000000000..85c06bf7698 --- /dev/null +++ b/Master/texmf-dist/doc/generic/pst-solides3d/doc-en/par-section-en.tex @@ -0,0 +1,955 @@ +\section{Sectioning a solid with a plane} + +\subsection{Drawing the \Index{intersection} between a plane and a solid} + +\subsubsection{The parameters} + +The option \texttt{intersectionplan=\{[a b c d]\}} allows the user +to draw the intersection between a plane and a solid. The numbers +between the braces are the coefficients of the affine plane with +equation: $ax+by+cz+d=0$. It is possible to draw the intersection +between a solid and more than one plane by placing the appropriate +parameters in order, as in the following example. + +The drawing is activated with \texttt{\texttt{\Lkeyword{intersectiontype}=0}} or any +value $\geq0$. + +The colour of the intersection line is chosen with the option +\texttt{\Lkeyword{intersectioncolor}=(bleu) (rouge) etc.}. In the same order, +the thickness of the appropriate line +\texttt{\Lkeyword{intersectionlinewidth}=1 2 etc.} (dimensions in picas) is +set up. + + +The hidden parts, drawn with dashed lines, will be shown with +\Lkeyword{action}=\Lkeyval{draw}. + +\begin{LTXexample}[width=7cm] +\begin{pspicture}(-3,-2)(3,7.5) +\psset{viewpoint=50 20 20 rtp2xyz,Decran=50} +\psset{lightsrc=viewpoint} \psSolid[object=cylindre, + ngrid=1 24, + r=2, + fillcolor=yellow!25, + intersectiontype=0, + intersectionplan={ + [0 0 1 -1] + [0 0 1 -2] + [0 0 1 -3] + [0.894 0 0.447 -1.8]}, + intersectioncolor=(bleu) (rouge) (vert) (rose), + intersectionlinewidth=1 1.5 1.8 2.2] +\axesIIID(2,2,6)(3,3,7) +\end{pspicture} +\end{LTXexample} + +\subsection{Slicing a solid} + +\subsubsection{Slicing a filled solid} + +The object under consideration is a cylinder. The plane that +slices the object is defined by: + + \begin{verbatim} + plansepare={[a b c d]} + \end{verbatim} + +The two parts are not drawn, but memorised with the name +\texttt{\Lkeyword{name}=partiescylindre}: + + \begin{verbatim} +\psset{solidmemory} +\psSolid[object=cylindre, + r=2,h=6 + ngrid=6 24, + plansepare={[0.707 0 0.707 0]}, + name=partiescylindre, + action=none](0,0,-3) + \end{verbatim} + + +Then they are displayed separately using their respective index +numbers. The numbering of the two parts is determined by the +direction of the normal to the \Index{slicing} plane: 0 if above the +normal, 1 if below. For both parts, the sliced face carries the +number 0. If there are several sliced faces, as may happen in the +case of a torus, they are numbered 0, 1 etc. + + + \begin{verbatim} +\psSolid[object=load, + load=partiescylindre1, + fillcolor={[rgb]{0.7 1 0.7 }}, + fcol=0 (1 1 0.7 setrgbcolor)] +\psSolid[object=load, + load=partiescylindre0,RotZ=60, + fillcolor={[rgb]{0.7 1 0.7 }}, + fcol=0 (1 1 0.7 setrgbcolor)](0,4,0) + \end{verbatim} + +\begin{center} +\begin{pspicture}(-4,-5)(7,4) +\psframe(-4,-5)(7,4) +\psset{viewpoint=50 -40 10 rtp2xyz,Decran=50,linecolor=darkgray} +%\lightsource +\psset{lightsrc=viewpoint} +\psSolid[object=grille,action=draw, + base=-3 5 -3 5, + linecolor=red](0,0,-3) +\psset{solidmemory} +\psSolid[object=cylindre, + r=2,h=6, + ngrid=6 24, + plansepare={[0.707 0 0.707 0]}, + name=partiescylindre, + action=none](0,0,-3) +\psSolid[object=load, + load=partiescylindre1, + fillcolor={[rgb]{0.7 1 0.7 }}, + fcol=0 (1 1 0.7 setrgbcolor)] +\psSolid[object=load, + load=partiescylindre0,RotZ=90, + fillcolor={[rgb]{0.7 1 0.7 }}, + fcol=0 (1 1 0.7 setrgbcolor)](0,4,0) +\psSolid[object=plan,action=draw, + definition=equation, + args={[0.707 0 0.707 0] 90}, + base=-2 2 -3 3,planmarks,showBase] +\axesIIID(0,0,0)(2.5,2.5,3.5) +\end{pspicture} +\end{center} + +\subsubsection{Slicing a \Index{hollow solid}} + +The options \verb+rm=0,hollow+ allow us to not only remove a +face \verb+rm=0+ but also to see inside it \Lkeyword{hollow}. + +\begin{center} +\begin{pspicture}(-4,-5)(7,4) +\psframe(-4,-5)(7,4) +\psset{viewpoint=50 -40 10 rtp2xyz,Decran=50,linecolor=darkgray} +%\lightsource +\psset{lightsrc=viewpoint} +\psSolid[object=grille,action=draw, + base=-3 5 -3 5, + linecolor=red](0,0,-3) +\psset{solidmemory} +\psSolid[object=cylindre, + r=2,h=6, + ngrid=6 24, + plansepare={[0.707 0 0.707 0.5]}, + name=partiescylindre, + action=none](0,0,-3) +\psSolid[object=load, + load=partiescylindre1, + fillcolor={[rgb]{0.7 1 0.7 }}, + rm=0,hollow, + incolor={[rgb]{1 1 0.7}}] +\psSolid[object=load, + load=partiescylindre0,RotZ=90, + fillcolor={[rgb]{0.7 1 0.7 }}, + rm=0,hollow, + incolor={[rgb]{1 1 0.7}}](0,4,0) +\psSolid[object=plan,action=draw, + definition=equation, + args={[0.707 0 0.707 0.5] 90}, + base=-2 2 -3 3,planmarks,showBase] +\composeSolid +\end{pspicture} +\end{center} + + +\subsection{\Index{Slice} of a \Index{pyramid}} + +\subsubsection{Highlighting the \Index{contour lines} and first slice} + +This pyramid is generated as \texttt{\Lkeyword{object}=\Lkeyval{new}} by giving a list +of the coordinates of the vertices, and the vertices of each face. + +\begin{verbatim} + sommets= + 0 -2 0 %% 0 + -2 0 0 %% 1 + 0 4 0 %% 2 + 4 0 0 %% 3 + 0 0 5, %% 4 + faces={ + [3 2 1 0] + [4 0 3] + [4 3 2] + [4 2 1] + [4 1 0] +} +\end{verbatim} + +In the first diagram, the slicing lines are highlighted. + + \begin{verbatim} + intersectiontype=0, + intersectionplan={[0 0 1 -1] [0 0 1 -2]}, + intersectionlinewidth=1 2, + intersectioncolor=(bleu) (rouge) + \end{verbatim} + +Then we cut off the upper part, and draw the slicing plane as +well. + + \begin{verbatim} +\psSolid[object=new, + sommets= + 0 -2 0 %% 0 + -2 0 0 %% 1 + 0 4 0 %% 2 + 4 0 0 %% 3 + 0 0 5, %% 4 + faces={ + [3 2 1 0] + [4 0 3] + [4 3 2] + [4 2 1] + [4 1 0]}, + plansepare={[0 0 1 -2]}, + name=firstSlice, + action=none] +\psSolid[object=load,action=draw*, + load=firstSlice1] +\psSolid[object=plan, + definition=equation, + args={[0 0 1 -2]}, + base=-3 5 -3 5,action=draw] + \end{verbatim} + +To avoid having to repeatedly type the vertices and faces of the +pyramid, we save these data to the files: +\begin{itemize} + \item \texttt{Pyramid-couleurs.dat} + \item \texttt{Pyramid-faces.dat} + \item \texttt{Pyramid-sommets.dat} + \item \texttt{Pyramid-io.dat} +\end{itemize} +thanks to the command \Lkeyword{action}=\Lkeyval{writesolid}: + + \begin{verbatim} +\psSolid[object=new, + sommets= + 0 -2 0 %% 0 + -2 0 0 %% 1 + 0 4 0 %% 2 + 4 0 0 %% 3 + 0 0 5, %% 4 + faces={ + [3 2 1 0] + [4 0 3] + [4 3 2] + [4 2 1] + [4 1 0] +},file=./Pyramid,fillcolor=yellow!50, + action=writesolid] + \end{verbatim} + +All these lines of code could then be removed and, thereafter, we +would recall the data with the command: + + \begin{verbatim} +\psSolid[object=datfile, + file=./Pyramid] + \end{verbatim} + +\begin{center} +\psset{unit=0.75} +\begin{pspicture}(-5,-2)(5,7) +%\psframe(-5,-2)(5,7) +\psset{viewpoint=50 20 10 rtp2xyz,Decran=50} +%\lightsource +\psset{lightsrc=viewpoint} +\psSolid[object=grille, + base=-3 5 -3 5, + linecolor=gray] +%% create the pyramid with base area in xy-plane +\psSolid[object=new, + sommets= + 0 -2 0 %% 0 + -2 0 0 %% 1 + 0 4 0 %% 2 + 4 0 0 %% 3 + 0 0 5, %% 4 +faces={ + [3 2 1 0] + [4 0 3] + [4 3 2] + [4 2 1] + [4 1 0] +}, action=draw*, + intersectiontype=0, + intersectionplan={[0 0 1 -1] + [0 0 1 -2]}, + intersectionlinewidth=1 2, + intersectioncolor=(bleu) (rouge)] +\axesIIID[linecolor=blue](4,4,5)(5,5,6) +\end{pspicture} +\hfill +\begin{pspicture}(-5,-2)(5,7) +%\psframe(-5,-2)(5,7) +\psset{viewpoint=50 20 10 rtp2xyz,Decran=50} +%\lightsource +\psset{lightsrc=viewpoint} +\psSolid[object=grille, + base=-3 5 -3 5, + linecolor=gray] +\psset{solidmemory} +%% create the pyramid with base area in xy-plane +\psSolid[object=new, + sommets= + 0 -2 0 %% 0 + -2 0 0 %% 1 + 0 4 0 %% 2 + 4 0 0 %% 3 + 0 0 5, %% 4 +faces={ + [3 2 1 0] + [4 0 3] + [4 3 2] + [4 2 1] + [4 1 0] +}, + plansepare={[0 0 1 -2]}, + name=firstSlice, + action=none] +\psSolid[object=load,action=draw*, + load=firstSlice1] +\psSolid[object=plan, + definition=equation, + args={[0 0 1 -2]}, + base=-3 5 -3 5,action=draw] +\axesIIID[linecolor=blue](4,4,2)(5,5,6) +\end{pspicture} +\end{center} + +\subsubsection{The second \Index{slice} and its insertion within the \Index{pyramid}} + +Having removed the upper part \texttt{firstSlice0} (which no +longer appears), we slice the frustum of the pyramid +\texttt{firstSlice1}, and keep the upper part of this as +\texttt{secondSlice0}, then we record it and insert it into a wire +frame model of the pyramid: + + + \begin{verbatim} +\psset{solidmemory} +\psSolid[object=datfile, + file=./Pyramid, + plansepare={[0 0 1 -2]}, + name=firstSlice, + action=none] +\psSolid[object=load, + load=firstSlice1, + action=none, + plansepare={[0 0 1 -1]}, + name=secondSlice] +\psSolid[object=load,action=draw*, + load=secondSlice0] +\psSolid[object=load, + load=secondSlice0, + file=./slicePyramid, + action=writesolid] +\psSolid[object=datfile,fillcolor=yellow!50, + file=./slicePyramid] + \end{verbatim} + + +\begin{center} +\psset{unit=0.75} +\begin{pspicture}(-5,-2)(4,7) +%\psframe(-4,-2)(4,7) +\psset{viewpoint=50 20 10 rtp2xyz,Decran=50} +%\lightsource +\psset{lightsrc=viewpoint} +\psSolid[object=grille, + base=-3 5 -3 5, + linecolor=gray] +\psset{solidmemory} +%% create the pyramid with base area in xy-plane +%\psSolid[object=new, +% sommets= +% 0 -2 0 %% 0 +% -2 0 0 %% 1 +% 0 4 0 %% 2 +% 4 0 0 %% 3 +% 0 0 5, %% 4 +% faces={ +% [3 2 1 0] +% [4 0 3] +% [4 3 2] +% [4 2 1] +% [4 1 0] +%},file=./Pyramid,fillcolor=yellow!50, +% action=writesolid] +\psSolid[object=datfile, + file=./Pyramid, + plansepare={[0 0 1 -2]}, + name=firstSlice, + action=none] +\psSolid[object=plan, + definition=equation, + args={[0 0 1 -1]},action=draw, + base=-3 5 -3 5] +\psSolid[object=load, + load=firstSlice1, + action=none, + plansepare={[0 0 1 -1]}, + name=secondSlice] +%\psSolid[object=load,action=draw*, +% load=secondSlice0] +%\psSolid[object=load, +% load=secondSlice0, +% file=./slicePyramid, +% action=writesolid] +\psSolid[object=datfile,fillcolor=yellow!50, + file=./slicePyramid] +\psSolid[object=plan, + definition=equation, + args={[0 0 1 -2]}, + base=-3 5 -3 5,action=draw] +\axesIIID[linecolor=blue](0,0,2)(5,5,6) +\end{pspicture} +\hfill +\begin{pspicture}(-4,-2)(6,7) +\psset{viewpoint=50 20 10 rtp2xyz,Decran=50} +%\lightsource +\psset{lightsrc=viewpoint} +\psSolid[object=grille, + base=-3 5 -3 5, + linecolor=gray] +\psSolid[object=datfile,fillcolor=yellow!50, + file=./slicePyramid] +\psSolid[object=datfile, + file=./Pyramid,action=draw] +\axesIIID[linecolor=blue](4,4,2)(5,5,6) +\end{pspicture} +\end{center} + +\subsection{Slicing an \Index{octahedron} with a plane parallel to one of its faces} + +\subsubsection{The view inside} + +Recall that there are options \verb+rm=0,hollow+ that allow us, +on the one hand, to remove a face \verb+rm=0+ and, on the other, +to look inside \Lkeyword{hollow}. + +In the following example, we shall start by generating the +required objects without drawing them (\texttt{\Lkeyword{action}=\Lkeyval{none}}). + +We construct the octahedron, giving the center of the face with +index $1$ the name $G$, then define the point $H$ which satisfies +$\overrightarrow{OH} = 0.8\,\overrightarrow{OG}$. After that we +define $P$ to be the plane through $H$ parallel to the face of the +octahedron with index $1$. Finally, we slice the octahedron using +the plane $P$. + +\begin{LTXexample}[width=7.5cm] +\begin{pspicture}(-3.5,-3)(4.5,5) +\psset{viewpoint=100 5 10 rtp2xyz,Decran=80, + lightsrc=viewpoint,solidmemory,action=none} +\psSolid[object=octahedron, + a=4,name=my_octahedron,] +\psSolid[object=point, + definition=solidcentreface, + args=my_octahedron 1, + name=G,] +\psSolid[object=point, + definition=mulv3d, + args=G .8, + name=H,] +\psSolid[object=plan, + definition=solidface, + args=my_octahedron 1, + base=-4 4 -4 4, + name=P,](H,,) +\psSolid[object=load, + load=my_octahedron, + plansepare=P, + name=part] +\psSolid[object=load,load=part1, + rm=0,hollow,action=draw**, + fillcolor={[rgb]{0.7 1 0.7}}, + incolor={[rgb]{1 1 0.7}},] +\psSolid[object=plan,args=P, + action=draw,showBase] +\psSolid[object=line, + args=0 0 0 H, + linestyle=dashed,] +\psProjection[object=point,plan=P,args=0 0, + fontsize=20,pos=cl,text=H,phi=90,] +\axesIIID[linecolor=blue,linewidth=0.4pt](0,0,0)(4,4,4) +\end{pspicture} +\end{LTXexample} + +\subsubsection{Regarding the solid as filled} + +The option \verb+fcol=0 (YellowOrange)+ allows us to colour the +face with index 0. + +\begin{LTXexample}[width=7.5cm] +\begin{pspicture}(-3.5,-3)(4.5,5) +\psset{viewpoint=100 5 10 rtp2xyz,Decran=80, + lightsrc=viewpoint,solidmemory,action=none} +\psSolid[object=octahedron, + a=4,name=my_octahedron,] +\psSolid[object=point, + definition=solidcentreface, + args=my_octahedron 1, + name=G,] +\psSolid[object=point, + definition=mulv3d, + args=G .8, + name=H,] +\psSolid[object=plan, + definition=solidface, + args=my_octahedron 1, + base=-4 4 -4 4, + name=P,](H,,) +\psSolid[object=load, + load=my_octahedron, + plansepare=P, + name=part] +\psSolid[object=load, + load=part1, + fcol=0 (YellowOrange), + action=draw**, + fillcolor={[rgb]{0.7 1 0.7}},] +\psSolid[object=plan,args=P, + action=draw,showBase] +\psSolid[object=line, + args=0 0 0 H, + linestyle=dashed,] +\psProjection[object=point,plan=P,args=0 0, + fontsize=20,pos=cl,text=H,phi=90,] +\axesIIID[linecolor=blue,linewidth=0.4pt](0,0,0)(4,4,4) +\end{pspicture} +\end{LTXexample} + +\subsubsection{The two parts of a sliced solid} + +You will recall that the direction of the normal of the slicing +plane determines the numbering of the two parts: 0 if above the +normal, 1 if below. For both parts, the sliced face carries the +number 0. If there are several sliced faces, as in the case of the +torus, they are numbered 0, 1 etc. + +Using two steps, we memorise both parts of the sliced solid: + + \begin{verbatim} +\psSolid[object=load, + load=my_octahedron, + plansepare=P, + name=part] + \end{verbatim} + +Then we position and render each part: + + \begin{verbatim} +\psSolid[object=load, + fcol=0 (YellowOrange), + fillcolor={[rgb]{0.7 1 0.7}}, + load=part1] +\psSolid[object=load, + fillcolor={[rgb]{0.7 1 0.7}}, + load=part0](H 2 mulv3d,,) +\composeSolid + \end{verbatim} + + +\begin{LTXexample}[width=7.5cm] +\begin{pspicture}(-3.5,-3)(4.5,5) +\psset{viewpoint=100 5 20 rtp2xyz,Decran=150, + lightsrc=viewpoint,solidmemory,action=none} +\psSolid[object=octahedron, + a=2,name=my_octahedron,] +\psSolid[object=point, + definition=solidcentreface, + args=my_octahedron 1, + name=G,] +\psSolid[object=point, + definition=mulv3d, + args=G .7, + name=H,] +\psSolid[object=plan, + definition=solidface, + args=my_octahedron 1, + base=-4 4 -4 4, + name=P,](H,,) +\psSolid[object=load, + load=my_octahedron, + plansepare=P, + name=part] +\psset{action=draw**} +\psSolid[object=load, + load=part1, + fcol=0 (YellowOrange), + fillcolor={[rgb]{0.7 1 0.7}},] +\psSolid[object=load, + fillcolor={[rgb]{0.7 1 0.7}}, + load=part0](H 2 mulv3d,,) +\composeSolid +\end{pspicture} +\end{LTXexample} + +\subsection{Slices of a cube} + +\subsubsection{Highlighting the edges of the cut} + +\begin{LTXexample}[width=8cm] +\psset{viewpoint=100 30 20 rtp2xyz,Decran=150} +\begin{pspicture}(-4,-3)(4,5) +\psset{solidmemory} +\psSolid[object=plan,definition=normalpoint, + args={1 1 1 [1 1 1]},action=none,name=P] +\psSolid[object=cube,a=2,action=draw, + intersectiontype=0, + intersectionplan=P, + intersectionlinewidth=2, + intersectioncolor=(rouge), +](1,1,1) +\psProjection[object=point, + args=0 0,fontsize=10,pos=dc, + text=H,phi=-30,plan=P, +] +\psSolid[object=line, + linestyle=dashed, + args=0 0 0 1 1 1] +\psSolid[object=vecteur, + linecolor=red, + args=1 1 1 .7 mulv3d](1,1,1) +\axesIIID[linecolor=blue](2,2,2)(2.5,2.5,2.5) +\end{pspicture} +\end{LTXexample} + +\subsubsection{Showing the sliced cube with its hexagonal cut face} + +\begin{LTXexample}[width=8cm] +\psset{viewpoint=100 30 20 rtp2xyz,Decran=150} +\begin{pspicture}(-4,-3)(4,5) +\psset{solidmemory} +\psSolid[object=plan,action=none,definition=normalpoint, + args={1 1 1 [1 1 1]},name=P] +\psSolid[object=cube,a=2, + plansepare=P, + action=none, + name=parts_cube, +](1,1,1) +\psSolid[object=load, + load=parts_cube1, + fcol=0 (Dandelion), + fillcolor={[rgb]{0.7 1 0.7}}, +] +\psProjection[object=point, + args=0 0,fontsize=10,pos=dc, + text=H,phi=-30,plan=P, +] +\psSolid[object=vecteur, + linecolor=red, + args=1 1 1 .7 mulv3d](1,1,1) +\axesIIID[linecolor=blue](2,2,2)(2.5,2.5,2.5) +\end{pspicture} +\end{LTXexample} + +\subsubsection{The sliced cube in various positions} + +Where we use the option that allows us to memorise a solid, in +order to put the truncated cube, after undergoing various +transformations, down on its cut face. + + \begin{verbatim} +\psset{solidmemory} +\psSolid[object=datfile, + fcol=0 (Dandelion), + fillcolor={[rgb]{0.7 1 0.7}}, + name=C1, + action=none, + file=./cubeHexagone] + \end{verbatim} + + +\begin{center} +\begin{pspicture}(-3,-3)(3,3) +\psframe(-3,-2)(3,3) +\psset{viewpoint=100 30 20 rtp2xyz,Decran=100} +%\lightsource +\psset{lightsrc=viewpoint} +\psSolid[object=grille, + base=-2 3 -2 3, + linecolor=gray] +\psSolid[object=datfile, + fcol=0 (Dandelion), + fillcolor={[rgb]{0.7 1 0.7}}, + file=./cubeHexagone] +\axesIIID[linecolor=blue](2,2,2)(2.5,2.5,2.5) +\end{pspicture} + +\hfil + +\begin{pspicture}(-2,-3)(4,3) +\psframe(-2,-2)(4,3) +\psset{viewpoint=100 -30 20 rtp2xyz,Decran=100} +%\lightsource +\psset{lightsrc=viewpoint} +\psSolid[object=grille, + base=-2 3 -2 3, + linecolor=gray] +\psSolid[object=datfile, + fcol=0 (Dandelion), + fillcolor={[rgb]{0.7 1 0.7}}, + file=./cubeHexagone] +\axesIIID[linecolor=blue](2,2,2)(2.5,2.5,2.5) +\end{pspicture} + +\begin{pspicture}(-3,-2)(3,3) +\psframe(-3,-2)(3,3) +\psset{viewpoint=100 225 20 rtp2xyz,Decran=100} +%\lightsource +\psset{lightsrc=viewpoint} +\psSolid[object=grille, + base=-2 3 -2 3, + linecolor=gray] +\psSolid[object=datfile, + fcol=0 (Dandelion), + fillcolor={[rgb]{0.7 1 0.7}}, + file=./cubeHexagone] +\axesIIID[linecolor=blue](0,0,0)(2.5,2.5,2.5) +\end{pspicture} +\hfil +\begin{pspicture}(-3,-2)(3,3) +\psframe(-3,-2)(3,3) +\psset{viewpoint=100 30 20 rtp2xyz,Decran=100} +%\lightsource +\psset{lightsrc=viewpoint} +\psSolid[object=grille, + base=-2 3 -2 3, + linecolor=gray] +\psset{solidmemory} +\psSolid[object=datfile, + fcol=0 (Dandelion), + fillcolor={[rgb]{0.7 1 0.7}}, + name=C1, + action=none, + file=./cubeHexagone] +\codejps{C1 {-1.5 -1.5 0 translatepoint3d} solidtransform +drawsolid** +} +\axesIIID[linecolor=blue](0,0,0)(2.5,2.5,2.5) +\end{pspicture} + +\begin{pspicture}(-3,-2)(3,4) +\psframe(-3,-2)(3,3) +\psset{viewpoint=100 30 20 rtp2xyz,Decran=100} +%\lightsource +\psset{lightsrc=viewpoint} +\psSolid[object=grille, + base=-2 3 -2 3, + linecolor=gray] +\psset{solidmemory} +\psSolid[object=datfile, + fcol=0 (Dandelion), + fillcolor={[rgb]{0.7 1 0.7}}, + name=C1, + action=none, + file=./cubeHexagone] +\codejps{C1 {-1.5 -1.5 0 translatepoint3d} solidtransform + {0 0 45 rotateOpoint3d} solidtransform +drawsolid** +} +%\composeSolid +\axesIIID[linecolor=blue](0,0,0)(2.5,2.5,2.5) +\end{pspicture} +\hfil +\begin{pspicture}(-3,-2)(3,4) +\psframe(-3,-2)(3,3) +\psset{viewpoint=100 30 20 rtp2xyz,Decran=100} +%\lightsource +\psset{lightsrc=viewpoint} +\psSolid[object=grille, + base=-2 3 -2 3, + linecolor=gray] +\psset{solidmemory} +\psSolid[object=datfile, + fcol=0 (Dandelion), + fillcolor={[rgb]{0.7 1 0.7}}, + name=C1, + action=none, + file=./cubeHexagone] +\codejps{C1 {-1.5 -1.5 0 translatepoint3d} solidtransform + {0 0 45 rotateOpoint3d} solidtransform + {-35.2644 -90 add 0 0 rotateOpoint3d} solidtransform +drawsolid* +} +\axesIIID[linecolor=blue](1,2.5,0.5)(2.5,3,2.5) +\end{pspicture} +\end{center} + + +\subsection{Multiple sections} + +\subsubsection{Slicing a sphere with PStricks} + +\begin{LTXexample}[width=8cm] +\begin{pspicture}(-4,-4)(4,4) +\psset{viewpoint=100 20 20 rtp2xyz,Decran=75} +\psset{solidmemory,lightsrc=viewpoint} +\codejps{ + /coeff 0.75 def /rO 4 def /OH coeff rO mul neg def}% +\psSolid[object=sphere, + r=rO,ngrid=9 18, + plansepare={[1 0 0 OH]}, + name=part, + action=none] +\psSolid[object=load, + load=part1,plansepare={[-1 0 0 OH]},action=none,name=part] +\psSolid[object=load, + load=part1,plansepare={[0 1 0 OH]},action=none,name=part] +\psSolid[object=load, + load=part1,plansepare={[0 -1 0 OH]},action=none,name=part] +\psSolid[object=load, + load=part1,plansepare={[0 0 1 OH]},action=none,name=part] +\psSolid[object=load, + load=part1,plansepare={[0 0 -1 OH]},action=none,name=part] +\psSolid[object=load,hue=.1 .8 0.5 1, + load=part1](0,0,0) +\composeSolid +\end{pspicture} +\end{LTXexample} + +\subsubsection{Multiple sections of a \Index{parallelepiped}} + +Multiple sections are better carried out inside a PostScript loop, +within \verb+\codejps+; it's easier and quicker! + +In this example, the original solid is a parallelepiped. +Truncations of the vertices and chamfering of the edges are +effected by means of slicing planes, starting off with the +vertices and finishing with the edges. + +\begin{LTXexample}[width=7cm] +\begin{pspicture}(-3.5,-4)(3.5,4) +\psset{viewpoint=100 -20 10 rtp2xyz,Decran=100} +%\lightsource +\psset{lightsrc=viewpoint} +\codejps{ +4 4 6 newparallelepiped +45 90 360 { +/iAngle exch def + /n_x iAngle cos 35.2644 cos mul def + /n_y iAngle sin 35.2644 cos mul def + /n_z 35.2644 sin def + /distance 2 3 add 3 sqrt div neg def +[ n_x n_y n_z distance] +solidplansepare +} for +45 90 360 { +/iAngle exch def + /n_x iAngle cos 35.2644 cos mul def + /n_y iAngle sin 35.2644 cos mul def + /n_z 35.2644 sin neg def + /distance 2 3 add 3 sqrt div neg def +[ n_x n_y n_z distance] +solidplansepare +} for +45 90 360 { +/iAngle exch def +% plan : ax+by+cz-d=0 +[ iAngle cos % a + iAngle sin % b + 0 % c + -2.5 % -d +] solidplansepare +} for +dup [.5 .2] solidputhuecolors +solidlightOn +drawsolid*} +\end{pspicture} +\end{LTXexample} +\subsection{Sections of a torus} +%\begin{pspicture}(-6,-4)(6,4) +%\psSolid[r1=3,r0=1.5, +% object=tore, +%% ngrid=18 60, +% file=./tore1860,action=writesolid] +%\end{pspicture} + +\begin{center} +\begin{pspicture}(-6,-4)(6,4) +\pstVerb{/Ampl 3 2 sqrt mul def}% +\psset{viewpoint=50 -10 30 rtp2xyz,Decran=50} +%\lightsource +\psset{lightsrc=viewpoint} +\psframe[fillstyle=solid,fillcolor=gray!50](-6,-4)(6,4) +%\psset{solidmemory} +%\psSolid[object=datfile,file=./tore1860, +% plansepare={[1 0 0 -1.5]}, +% name=lemniscate, +% action=none](0,0,0) +%\psSolid[object=load, +% load=lemniscate1, +% file=./tore1860lemniscate,action=writesolid](0,0,0) +\defFunction[algebraic]{lemniscate}(t){1.5}{Ampl*sin(t)/(1+cos(t)*cos(t))}{Ampl*sin(t)*cos(t)/(1+cos(t)*cos(t))} +\psSolid[object=datfile,file=./tore1860lemniscate, + fcol=0 (0.5 0.72 0.5 setrgbcolor) + 1 (0.5 0.72 0.5 setrgbcolor), + fillcolor=green!30, + intersectiontype=0, + intersectionplan={ + [1 0 0 -1.5]}, + intersectioncolor=(rouge), + intersectionlinewidth=2.2] +\psSolid[object=courbe,r=0,linewidth=2pt, + range=0 6.28, + linecolor=red, + function=lemniscate]% +\psSolid[object=plan,action=draw, + definition=equation, + args={[1 0 0 -1.5] 90}, + base=-5 5 -2 2,planmarks,showBase] +%\composeSolid +\end{pspicture} +\end{center} +\begin{center} +\begin{pspicture}(-6,-4)(6,4) +\pstVerb{/Ampl 3 2 sqrt mul def}% +\psset{viewpoint=50 -10 30 rtp2xyz,Decran=50} +%\lightsource +\psset{lightsrc=viewpoint} +\psframe[fillstyle=solid,fillcolor=gray!50](-6,-4)(6,4) +\defFunction[algebraic]{lemniscate}(t){1.5}{Ampl*sin(t)/(1+cos(t)*cos(t))}{Ampl*sin(t)*cos(t)/(1+cos(t)*cos(t))} +\psSolid[object=datfile,file=./tore1860lemniscate, + hollow, + rm=0 1, + fillcolor=green!30,incolor=yellow!50] +\psSolid[object=courbe,r=0,linewidth=2pt, + range=0 6.28, + linecolor=red, + function=lemniscate]% +\psSolid[object=plan,action=draw, + definition=equation, + args={[1 0 0 -1.5] 90}, + base=-5 5 -2 2,planmarks,showBase] +\end{pspicture} +\end{center} +\subsection{Some more examples} +\begin{enumerate} +\item +You will find a \textit{jps} coded version of this document +within the \verb+\codejps+ command in the following document: + +\centerline{\url{http://melusine.eu.org/syracuse/mluque/solides3d2007/sections}} +\item A lesson about conic sections on: + +\centerline{\url{http://melusine.eu.org/syracuse/mluque/solides3d2007/sections/sections-cone}} +\item A lesson about cylindrical sections on: + +\centerline{\url{http://melusine.eu.org/syracuse/mluque/solides3d2007/sections/section-cylindre}} +\item A lesson about sections of a torus on: + +\centerline{\url{http://melusine.eu.org/syracuse/mluque/solides3d2007/sections/section-tore}} +\end{enumerate} + + +\endinput |