\section{Defining a \Index{projection plane}}

The \Index{plane} of projection is defined with the option
\texttt{\Lkeyword{plan}=plantype} which expects an argument \textit{type of
plane}. The creation of such an argument invariably happens
through the command \verb+\psSolid[object=plan]+ (see the relevant
paragraph of chapter 4 and the example below in sub-paragraph
\textit{Labels\/} of the paragraph \textit{Points}).
\endinput

\section{Specifying a general projection plane}

To define a plane of projection, we assume that the drawing to be
projected resides on the plane $Oxy$, and the user has to specify
the images of the origin $O$ and the basis $\overrightarrow{\imath}$,
$\overrightarrow{\jmath}$, and $\overrightarrow{k}$.
If they wish to abbreviate the syntax, users are required at most
to specify the image of $O$ and the image of $\overrightarrow{k}$,
in other words the image of the origin and the components of the
normal to the plane of projection.

The package then suggests an orientation of the plane of
projection. If users are not happy with this orientation, they can
specify it themselves.

The following paragraphs detail the proposed syntax.


\subsection{The origin}

\texttt{(x,y,z)} are the projected coordinates of the origin of
the plane, which are either numerical values or expressions that
PostScript can handle.


\texttt{\textbackslash psProjection[\ldots](1,2,3)} positions the
origin of the plane at the coordinates $(1,2,3)$.


\texttt{\textbackslash psProjection[\ldots](0.5 0.5 add,2 sqrt,1.5 2
exp)} positions the origin of the plane at the coordinates
$(1,\sqrt{2},1.5^2)$.


If no coordinates are chosen (by the end of the command), it is
interpreted as $(0,0,0)$, placing the origin at $O$.


\subsection{Defining the normal to a plane}

There are four ways to define a normal to a plane, two of which
have an option to rotate the coordinate system of the plane around
that normal: \Lkeyword{normal}

\subsubsection{Method 1: giving the components of the normal vector}


In this case \texttt{\Lkeyword{normal}=nx ny nz}, the argument consists of
3 values: the components of the normal vector. For example
\texttt{\Lkeyword{normal}=0 0 1} for the plane $Oxy$.

\newpage

\begin{LTXexample}[width=6.5cm]
\psset{unit=0.5}
\begin{pspicture}(-9,-6.5)(6,6)
\psframe*[linecolor=blue!50](-6,-6)(6,6)
\psset{lightsrc=10 -20 50,viewpoint=50 20 30 rtp2xyz,Decran=50}
{\psset{linewidth=0.5\pslinewidth,linecolor=gray}
\psSolid[object=grille,base=-4 4 -4 4]}
\defFunction[algebraic]{f1}(x){3*cos(x)}{3*sin(x)}{}
\psProjection[object=courbeR2,
   range=-3.14 3.14,
   linecolor=blue,
   normal=0 0 1,
   function=f1]
\axesIIID(0,0,0)(4,4,4)
\psProjection[object=chemin,
  linewidth=.1,
  linecolor=red,
  normal=1 0 0,
  path=newpath
    0 0 smoveto
    -1 0 slineto]
\rput(0,-6.75){%
  \psframebox[linecolor=blue!50]
   {\texttt{$\backslash${}defFunction[algebraic]%
    \{f\}(x)\{3*cos(x)\}\{3*sin(x)\}\{\}}}}
\end{pspicture}
\end{LTXexample}

\newpage
If we call
$\big(\overrightarrow{i}(1,0,0),\overrightarrow{j}(0,1,0),\overrightarrow{k}(0,0,1)\big)$
the basis of the referencing coordinate system and if
$\big(\overrightarrow{I},\overrightarrow{J},\overrightarrow{K}\big)$
is the basis of the coordinate system of the plane to be defined,
with $\overrightarrow{K}$ being the chosen normal vector, then the
following relations are verified and should be kept in mind:
\begin{enumerate}
  \item $\overrightarrow{J}=\overrightarrow{K}\wedge \overrightarrow{i}$
  \item $\overrightarrow{I}=\overrightarrow{J}\wedge \overrightarrow{K}$
\end{enumerate}
If $\overrightarrow{K}=\overrightarrow{i}$ then
$\overrightarrow{J}=\overrightarrow{j}$

\encadre{With the convention: $\overrightarrow{K}$ is drawn in
 red, $\overrightarrow{J}$ in blue and $\overrightarrow{I}$ in green.} %$

\vfill
\begin{minipage}{0.27\linewidth}
\psset{unit=0.4}
\centerline{\texttt{[normal=0 0 1]}}

\begin{pspicture}(-6,-6)(4,7)%
\psframe*[linecolor=blue!50](-6,-6)(6,6)
\psset{lightsrc=10 -20 50,viewpoint=50 20 30 rtp2xyz,Decran=60}
{\psset{linewidth=0.5\pslinewidth,linecolor=gray}
\psSolid[object=grille,base=-4 4 -4 4]}
\axesIIID(0,0,0)(4,4,4)
\psProjection[object=chemin,
      linewidth=.2,
      linecolor=red,
      normal=1 0 0,
      path=newpath
            0 0 smoveto
            -1 0 slineto]
\psProjection[object=chemin,
      linewidth=.2,
      linecolor=blue,
      normal=0 0 1,
      path=newpath
            0 0 smoveto
            0 1 slineto]
\psProjection[object=chemin,
      linewidth=.2,
      linecolor=green,
      normal=0 0 1,
      path=newpath
            0 0 smoveto
            1 0 slineto]
\end{pspicture}
\end{minipage}
\hfill
\begin{minipage}{0.27\linewidth}
\psset{unit=0.4}
\centerline{\texttt{[normal=1 0 0]}}

\begin{pspicture}(-6,-6)(4,7)
\psframe*[linecolor=blue!50](-6,-6)(6,6)
\psset{lightsrc=50 20 30,viewpoint=50 20 30,Decran=70}
{\psset{linewidth=0.5\pslinewidth,linecolor=gray}
\psSolid[object=grille,base=-4 4 -4 4,RotY=90]}
\axesIIID(0,0,0)(4,4,4)
\psProjection[object=chemin,
      linewidth=.2,
      linecolor=green,
      normal=1 0 0,
      path=newpath
            0 0 smoveto
            1 0 slineto]
\psProjection[object=chemin,
      linewidth=.2,
      linecolor=blue,
      normal=1 0 0,
      path=newpath
            0 0 smoveto
            0 1 slineto]
\psProjection[object=chemin,
      linewidth=.2,
      linecolor=red,
      normal=0 0 1,
      path=newpath
            0 0 smoveto
            1 0 slineto]
\end{pspicture}
\end{minipage}
\hfill
\begin{minipage}{0.27\linewidth}
\psset{unit=0.4}

\centerline{\texttt{[normal=0 1 0]}}

\begin{pspicture}(-6,-6)(4,7)
\psframe*[linecolor=blue!50](-6,-6)(6,6)
\psset{lightsrc=50 60 30,viewpoint=50 60 30,Decran=70}
{\psset{linewidth=0.5\pslinewidth,linecolor=gray}
\psSolid[object=grille,base=-4 4 -4 4,RotX=-90]}
\axesIIID(0,0,0)(4,4,4)
\psProjection[object=chemin,
      linewidth=.2,
      linecolor=green,
      normal=0 1 0,
      path=
         newpath
            0 0 smoveto
            1 0 slineto]
\psProjection[object=chemin,
      linewidth=.2,
      linecolor=blue,
      normal=0 1 0,
      path=
         newpath
            0 0 smoveto
            0 1 slineto]
\psProjection[object=chemin,
      linewidth=.2,
      linecolor=red,
      normal=0 0 1,
      path=
         newpath
            0 0 smoveto
            0 1 slineto]
\end{pspicture}
\end{minipage}

\vfill

\begin{minipage}{0.27\linewidth}
\psset{unit=0.4}
\centerline{\texttt{[normal=1 0 1]}}

\begin{pspicture}(-6,-6)(4,7)%
\psframe*[linecolor=blue!50](-6,-6)(6,6)
\psset{lightsrc=50 20 20,viewpoint=50 20 20,Decran=70}
{\psset{linewidth=0.5\pslinewidth,linecolor=gray}
\psSolid[object=grille,base=-4 4 -4 4]
\psSolid[object=grille,base=-4 0 -4 4,RotY=90]
\psSolid[object=grille,base=-2 2 -4 4,RotY=45,linecolor=red](1.414,0,1.414)}
\psPoint(2,0,2){O1}%\psdot(O1)
\axesIIID(2.8,3,2.8)(4,4,4)
\psPoint(1.414,0,1.414){O1}\psPoint(2.414,0,2.414){OK}
\psline[linewidth=.2,linecolor=red](O1)(OK)
\psProjection[object=chemin,
      linewidth=.2,
      linecolor=blue,
      normal=1 0 1,
      path=
         newpath
            0 0 smoveto
            0 1 slineto](1.414,0,1.414)
\psProjection[object=chemin,
      linewidth=.2,
      linecolor=green,
      normal=1 0 1,
      path=
         newpath
            0 0 smoveto
            1 0 slineto](1.414,0,1.414)
\end{pspicture}
\end{minipage}
\hfill
\begin{minipage}{0.27\linewidth}
\psset{unit=0.4}
\centerline{\texttt{[normal=0 1 1]}}

\begin{pspicture}(-6,-6)(4,7)%
\psframe*[linecolor=blue!50](-6,-6)(6,6)
\psset{lightsrc=30 20 20,viewpoint=30 20 20,Decran=45}
{\psset{linewidth=0.5\pslinewidth,linecolor=gray}
\psSolid[object=grille,base=-4 4 -4 4]
\psSolid[object=grille,base=-4 0 -4 4,RotY=90,RotZ=90]
\psSolid[object=grille,base=-4 4 -2 2,RotX=-45,linecolor=red](0,1.414,1.414)}
\axesIIID(2.8,3,2.8)(4,4,4)
\psPoint(0,1.414,1.414){O1}\psPoint(0,2.414,2.414){OK}
\psline[linewidth=.2,linecolor=red](O1)(OK)
\psProjection[object=chemin,
      linewidth=.2,
      linecolor=blue,
      normal=0 1 1,
      path=
         newpath
            0 0 smoveto
            0 1 slineto](0,1.414,1.414)
\psProjection[object=chemin,
      linewidth=.2,
      linecolor=green,
      normal=0 1 1,
      path=
         newpath
            0 0 smoveto
            1 0 slineto](0,1.414,1.414)
\end{pspicture}
\end{minipage}
\hfill
\begin{minipage}{0.27\linewidth}
\psset{unit=0.4}
\centerline{\texttt{[normal=1 1 0]}}

\begin{pspicture}(-6,-6)(4,7)%
\psframe*[linecolor=blue!50](-6,-6)(6,6)
\psset{lightsrc=30 20 20,viewpoint=30 20 20,Decran=45}
{\psset{linewidth=0.5\pslinewidth,linecolor=gray}
\psSolid[object=grille,base=0 2 -4 4,RotY=90,RotZ=45,linecolor=red]
        (1.414,1.414,0)
\psSolid[object=grille,base=-4 4 -4 4]
\psSolid[object=grille,base= -2 0 -4 4,RotY=90,RotZ=45,linecolor=red]
        (1.414,1.414,0)}
\axesIIID(2.8,2.8,1)(4,4,4)
\psPoint(1.414,1.414,0){O1}\psPoint(2.414,2.414,0){OK}
\psline[linewidth=.2,linecolor=red](O1)(OK)
\psProjection[object=chemin,
      linewidth=.2,
      linecolor=blue,
      normal=1 1 0,
      path=
         newpath
            0 0 smoveto
            0 1 slineto](1.414,1.414,0)
\psProjection[object=chemin,
      linewidth=.2,
      linecolor=green,
      normal=1 1 0,
      path=
         newpath
            0 0 smoveto
            1 0 slineto](1.414,1.414,0)
\end{pspicture}
\end{minipage}

\vfill

\newpage

\subsubsection{Method 2: giving the components of the normal vector and an angle
of rotation}

In this case \texttt{\Lkeyword{normal}=nx ny nz A}, the argument takes four
values: the components of the normal vector and the angle of
rotation (in degrees) around that axis.

\begin{center}
\begin{minipage}{0.34\linewidth}
\psset{unit=0.5}
\centerline{\texttt{[normal=1 0 1]}}

\begin{pspicture}(-6,-6)(6,7)%
\psframe*[linecolor=blue!50](-6,-6)(6,6)
\psset{lightsrc=50 20 20,viewpoint=50 20 20,Decran=70}
{\psset{linewidth=0.5\pslinewidth,linecolor=gray}
\psSolid[object=grille,base=-4 4 -4 4]
\psSolid[object=grille,base=-4 0 -4 4,RotY=90]
\psSolid[object=grille,base=-2 2 -4 4,RotY=45,linecolor=red](1.414,0,1.414)}
\psPoint(2,0,2){O1}%\psdot(O1)
\axesIIID(2.8,3,2.8)(4,4,4)
\psPoint(1.414,0,1.414){O1}\psPoint(2.414,0,2.414){OK}
\psline[linewidth=.2,linecolor=red](O1)(OK)
\psProjection[object=chemin,
      linewidth=.2,
      linecolor=blue,
      normal=1 0 1,
      path=
         newpath
            0 0 smoveto
            0 1 slineto](1.414,0,1.414)
\psProjection[object=chemin,
      linewidth=.2,
      linecolor=green,
      normal=1 0 1,
      path=
         newpath
            0 0 smoveto
            1 0 slineto](1.414,0,1.414)
\defFunction[algebraic]{fonction}(x){cos(x)}{x}{}
\psProjection[object=courbeR2,
   range=-4 4,
   normal=1 0 1,
   function=fonction](1.414,0,1.414)
\end{pspicture}
\end{minipage}
\hfil
\begin{minipage}{0.34\linewidth}
\psset{unit=0.5}
\centerline{\texttt{[normal=1 0 1 45]}}

\begin{pspicture}(-6,-6)(6,7)%
\psframe*[linecolor=blue!50](-6,-6)(6,6)
\psset{lightsrc=50 20 20,viewpoint=50 30 20,Decran=70}
{\psset{linewidth=0.5\pslinewidth,linecolor=gray}
\psSolid[object=grille,base=-4 4 -4 4,action=draw]
\psSolid[object=grille,base=-4 4 -4 4,RotY=90,action=draw]}
\axesIIID(0,0,0)(4,4,4)
\psPoint(1.414,0,1.414){O1}\psPoint(2.414,0,2.414){OK}
\psline[linewidth=.2,linecolor=red](O1)(OK)
\psProjection[object=chemin,
      linewidth=.02,
      linecolor=red,
      normal=1 0 1 45,
      path=newpath
          -2 1 2
          {-4 smoveto
           0 8 srlineto} for
           -4 1 4
          {-2 exch smoveto
           4 0 srlineto} for
            ](1.414,0,1.414)
\psProjection[object=chemin,
      linewidth=.2,
      linecolor=blue,
      normal=1 0 1 45,
      path=
         newpath
            0 0 smoveto
            0 1 slineto](1.414,0,1.414)
\psProjection[object=chemin,
      linewidth=.2,
      linecolor=green,
      normal=1 0 1 45,
      path=
         newpath
            0 0 smoveto
            1 0 slineto](1.414,0,1.414)
\defFunction[algebraic]{fonction}(x){cos(x)}{x}{}
\psProjection[object=courbeR2,
   range=-4 4,
   normal=1 0 1 45 ,
   function=fonction](1.414,0,1.414)
\end{pspicture}
\end{minipage}
\end{center}

%\newpage
In the second figure, the normal (represented in red) is identical
to the one in the first figure, but the plane is rotated 45
degrees around that normal.


\subsubsection{Method 3: defining the normal by the images of \textit{i}
 and \textit{k}}

In this case \texttt{\Lkeyword{normal}=ix iy iz kx ky kz}, the argument
takes six values: the components of the images of
$\overrightarrow{i}$ and $\overrightarrow{k}$, with:
$\overrightarrow{J}=\overrightarrow{K}\wedge \overrightarrow{I}$.

\begin{center}
\begin{minipage}{0.34\linewidth}
\psset{unit=0.5}
\centerline{\texttt{[normal=0 1 0 1 0 0]}}

\begin{pspicture}(-6,-6)(6,7)%
\psframe*[linecolor=blue!50](-6,-6)(6,6)
\psset{lightsrc=50 20 20,viewpoint=50 30 20,Decran=70}
{\psset{linewidth=0.5\pslinewidth,linecolor=gray}
\psSolid[object=grille,base=-4 4 -4 4]%
\psSolid[object=grille,base=-4 4 -4 4,action=draw,RotX=90,RotZ=90]}%
\defFunction[algebraic]{fonction}(x){x}{x*sin(x)}{}
\axesIIID(0,0,0)(4,4,4)
\psProjection[object=chemin,
      linewidth=.1,
      linecolor=green,
      normal=0 1 0 1 0 0,
      path=
         newpath
            0 0 smoveto
            1 0 slineto]
\psProjection[object=chemin,
      linewidth=.1,
      linecolor=blue,
      normal=0 1 0 1 0 0,
      path=
         newpath
            0 0 smoveto
            0 1 slineto]
\psProjection[object=chemin,
      linewidth=.2,
      linecolor=red,
      normal=0 0 1,
      path=
         newpath
            0 0 smoveto
            1 0 slineto]
\psProjection[object=courbeR2,
   range=-4 4,
   linecolor=green,
   normal=0 1 0 1 0 0,
   function=fonction]
\end{pspicture}
\end{minipage}
\hfil
\begin{minipage}{0.34\linewidth}
\psset{unit=0.5}
\centerline{\texttt{[normal=-1 1 0 1 1 2 ]}}

\begin{pspicture}(-6,-6)(6,7)%
\psframe*[linecolor=blue!50](-6,-6)(6,6)
\psset{lightsrc=50 20 20,viewpoint=50 30 20,Decran=70}
{\psset{linewidth=0.5\pslinewidth,linecolor=gray}
\psSolid[object=grille,base=-4 4 -4 4]}%
\defFunction[algebraic]{fonction}(x){x}{x*sin(x)}{}
\axesIIID(0,0,0)(4,4,4)
\psProjection[object=chemin,
      linewidth=.1,
      linecolor=green,
      normal=-1 1 0 1 1 2 ,
      path=
         newpath
            0 0 smoveto
            1 0 slineto]
\psProjection[object=chemin,
      linewidth=.1,
      linecolor=blue,
      normal=-1 1 0 1 1 2 ,
      path=
         newpath
            0 0 smoveto
            0 1 slineto]
\psPoint(0,0,0){O}\psPoint(0.4,0.4,0.8){K}
\psline[linewidth=.1,linecolor=red](O)(K)
\psProjection[object=courbeR2,
   range=-4 4,
   linecolor={[cmyk]{1,0,1,0.5}},
   normal=-1 1 0 1 1 2 ,
   function=fonction]
\psProjection[object=chemin,
      linewidth=.02,
      linecolor=red,
      normal=-1 1 0 1 1 2,
      path=newpath
          -4 1 4
          {-4 exch smoveto
           8 0 srlineto} for
           -4 1 4
          {-4 smoveto
           0 8 srlineto} for]
\end{pspicture}
\end{minipage}
\end{center}


\newpage
\subsubsection{Method 4: defining the normal by the images of
  \textit{i}, \textit{k} and an angle of rotation}

In this case \texttt{\Lkeyword{normal}=ix iy iz kx ky kz phi}, the argument
takes seven values: the components of the images of
$\overrightarrow{i}$, $\overrightarrow{k}$ and the angle of
rotation (in degrees) around the normal, with:
$\overrightarrow{J}=\overrightarrow{K}\wedge \overrightarrow{I}$.

\begin{center}
\begin{minipage}{0.34\linewidth}
\psset{unit=0.5}
\centerline{\texttt{[normal=0 1 0 1 0 0 90]}}

\begin{pspicture}(-6,-6)(6,7)%
\psframe*[linecolor=blue!50](-6,-6)(6,6)
\psset{lightsrc=50 20 20,viewpoint=50 30 20,Decran=70}
{\psset{linewidth=0.5\pslinewidth,linecolor=gray}
\psSolid[object=grille,base=-4 4 -4 4]%
\psSolid[object=grille,base=-4 4 -4 4,action=draw,RotX=90,RotZ=90]}%
\defFunction[algebraic]{fonction}(x){x}{x*sin(x)}{}
\axesIIID(0,0,0)(4,4,4)
\psProjection[object=chemin,
      linewidth=.1,
      linecolor=green,
      normal=0 1 0 1 0 0 90,
      path=
            0 0 smoveto
            1 0 slineto]
\psProjection[object=chemin,
      linewidth=.1,
      linecolor=blue,
      normal=0 1 0 1 0 0 90,
      path=
            0 0 smoveto
            0 1 slineto]
\psProjection[object=chemin,
      linewidth=.2,
      linecolor=red,
      normal=0 0 1,
      path=
            0 0 smoveto
            1 0 slineto]
\psProjection[object=courbeR2,
   range=-4 4,
   linecolor=green,
   normal=0 1 0 1 0 0 90,
   function=fonction]
\end{pspicture}
\end{minipage}
\hfil
\begin{minipage}{0.34\linewidth}
\psset{unit=0.5}
\centerline{\texttt{[normal=-1 1 0 1 1 2 90]}}

\begin{pspicture}(-6,-6)(6,7)%
\psframe*[linecolor=blue!50](-6,-6)(6,6)
\psset{lightsrc=50 20 20,viewpoint=50 30 20,Decran=70}
{\psset{linewidth=0.5\pslinewidth,linecolor=gray}
\psSolid[object=grille,base=-4 4 -4 4]}%
\defFunction[algebraic]{fonction}(x){x}{x*sin(x)}{}
\axesIIID(0,0,0)(4,4,4)
\psProjection[object=chemin,
  linewidth=.1,
  linecolor=green,
  normal=-1 1 0 1 1 2 90,
  path=newpath
    0 0 smoveto
    1 0 slineto]
\psProjection[object=chemin,
  linewidth=.1,
  linecolor=blue,
  normal=-1 1 0 1 1 2 90,
  path=newpath
    0 0 smoveto
    0 1 slineto]
\psPoint(0,0,0){O}\psPoint(0.4,0.4,0.8){K}
\psline[linewidth=.1,linecolor=red](O)(K)
\psProjection[object=courbeR2,
   range=-4 4,
   linecolor={[cmyk]{1,0,1,0.5}},
   normal=-1 1 0 1 1 2 90,
   function=fonction]
\psProjection[object=chemin,
  linewidth=.02,
  linecolor=red,
  normal=-1 1 0 1 1 2,
  path=newpath
  -4 1 4
  {-4 exch smoveto
   8 0 srlineto} for
   -4 1 4
  {-4 smoveto
   0 8 srlineto} for]
\end{pspicture}
\end{minipage}
\end{center}


\endinput
