<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">%% $Id: pst-mirror-doc.tex 248 2021-09-14 08:57:11Z herbert $
\errorcontextlines=100
\RequirePackage{pdfmanagement-testphase}
\DeclareDocumentMetadata{}
\listfiles
\documentclass[fontsize=11pt,english,BCOR=10mm,DIV=12,bibliography=totoc,parskip=false,headings=small,
    headinclude=false,footinclude=false,oneside]{pst-doc}

\usepackage{pst-mirror}
\let\myFV\fileversion
\usepackage{pst-grad}
\usepackage{pst-plot}
\usepackage{tabularx}
\usepackage{longtable}

\addbibresource{\jobname.bib}

\def\UrlFont{\small\ttfamily}
\makeatletter
\def\verbatim@font{\small\normalfont\ttfamily}
\makeatother
\newcommand\verbI[1]{\small\texttt{#1}}

\psset{subgriddiv=0,gridlabels=7pt,gridcolor=black!15}
%
\newcounter{boua}
\newcommand\itemBoua{\addtocounter{boua}{1}\strut\indent\textit{\theboua}\textsuperscript{o} --- }
\makeatletter
% macro d'Etienne RIGA sur fr.comp.text.tex
\newcount\r@pport  \newdimen\r@ppord
\newcount\kslant   \newdimen\kslantd

\def\ARC#1{\setbox0\hbox{$\m@th\displaystyle#1$}\kslant=\ht0
   \divide\kslant by1000\multiply\kslant by\fontdimen1\textfont1
   \divide\kslant by10000\kslantd=\kslant\fontdimen6\textfont1
      \divide\kslantd by7750\kern\kslantd
   \r@ppord=\wd0\multiply\r@ppord by100\divide\r@ppord by\ht0
   \multiply\r@ppord by300\advance\r@ppord by\ht0
   \pspicture(0,0)
   \psparabola[linewidth=.3pt](0,1.05\ht0)(.5\wd0,1.21\r@ppord)
   \endpspicture\kern-\kslantd\box0}
\makeatother

\def\oeil{\psarc[linewidth=2pt](0,2.5){2.5}{215}{270}%
  \psarc[linewidth=2pt](0,-2.5){2.5}{90}{140}%
  \psarc(-2.5,0){1}{-30}{30}\psarc(0,0){1.75}{160}{200}
  \psclip{%
    \pscircle[linestyle=none](0,0){1.75}}
    \pscircle[fillstyle=solid,fillcolor=lightgray](-2.5,0){0.9}
  \endpsclip}%

\def\decor{%
% plan de front
  \psset{Sphere=false}
  {\psset{normale=0 0, Xorigine=40, Yorigine=0, Zorigine=0}
  \pstSphereFrame[fillstyle=solid,fillcolor=OrangePale](-70,-50)(70,10)
  \pstSphereGrid[linecolor=blue,linewidth=0.2mm,grille=10,Ymin=-50,Ymax=10,Xmax=70,Xmin=-70](40,0,0)}%
  % plan horizontal
  {\psset{normale=0 90, Xorigine=40, Yorigine=0, Zorigine=-10}
  \pstSphereFrame[fillstyle=solid,fillcolor=cyan,opacity=0.5](-70,-30)(70,0)
  \pstSphereGrid[linecolor=blue,linewidth=0.2mm,grille=10,Ymin=-30,Ymax=0,Xmax=70,Xmin=-70](40,0,-10)}%
  % plan vertical gauche
  {\psset{normale=90 0, Xorigine=40, Yorigine=70, Zorigine=-10}
  \pstSphereFrame[fillstyle=solid,fillcolor=yellow](0,0)(-30,-60)
  \pstSphereGrid[linecolor=blue,linewidth=0.05mm,grille=10,Ymin=-60,Ymax=0,Xmin=-30,Xmax=0](40,70,-10)}
  % plan vertical droit
  {\psset{normale=90 0,%
                Xorigine=40,%
                Yorigine=-70,%
                Zorigine=-10}
\pstSphereFrame[fillstyle=solid,fillcolor=yellow](0,0)(-30,-60)
\pstSphereGrid[linecolor=blue,linewidth=0.05mm,grille=10,Ymin=-60,Ymax=0,Xmin=-30,Xmax=0](40,-70,-10)}}

\def\bgImage{\psscalebox{0.5}{\begin{pspicture}(-7,-7)(7,7)
  \newpsstyle{GradWhiteYellow}{fillstyle=gradient,gradbegin=yellow,gradend=yellow!20,
     linecolor=yellow!50,GradientCircle=true,gradmidpoint=0,GradientPos={(1,1)}}%
  \pscircle[style=GradWhiteYellow]{7.07}
  \pstSphereGrid[linecolor=red,grille=10,Ymin=-50,Ymax=50,Xmax=80,Xmin=-80,normale=0 0](20,0,0)
  \pstSphereGrid[linecolor=blue,grille=10,Ymin=-40,Ymax=-20,Xmax=80,Xmin=-80,normale=0 90](40,0,-10)%
  \pstSphereText[fillstyle=solid,fillcolor=red,normale=0 0,fontscale=40,fontname=Times-Roman,yO=0](20,0,10){pst-mirror}
  \pstSphereText[fillstyle=solid,fillcolor=black,normale=0 0,fontscale=20,fontname=Helvetica,yO=0](20,0,35){PSTricks}
  \pstSphereText[fillstyle=solid,fillcolor=blue,normale=0 90,fontscale=10,fontname=Helvetica,yO=2.5](10,0,-10){A Spherical Mirror}%
\end{pspicture}}}

\begin{document}
\author{Manuel Luque\\Herbert Vo\ss}
\docauthor{}
\title{Images on a spherical mirror}
\subtitle{A PSTricks package for drawing 3D objects on a sphere,  v\myFV}
\settitle

\tableofcontents

\clearpage
\begin{abstract}

\vfill\noindent
Thanks for feedback and contributions to:\\
Bruno Guegan; Jean-Paul Vignault
\end{abstract}


\section{Objectifs }
On voit souvent dans les villes, lorsque la visibilitÃ© Ã&nbsp; la sortie
d'un garage ou Ã&nbsp; un carrefour est insuffisante, ou bien
dans certains magasins pour des motifs de surveillance, des
miroirs bombÃ©s donnant de l'environnement un panorama trÃ©s large.
On peut prendre aussi une boule argentÃ©e ou dorÃ©e que l'on suspend
aux branches des sapins de NoÃ©l, pour voir le dÃ©cor se rÃ©flÃ©chir dans la Sphere
avec une distorsion bien particuliÃ©re.

L'objectif est de dÃ©finir des Ã©lÃ©ments de dÃ©cor en 3D, \textit{des
briques}, pour reconstruire ce qu'un observateur placÃ© Ã© une
certaine distance d'une boule miroir, Ã© la mÃ©me hauteur que son
centre verrait.


Les \textit{briques} Ã© notre disposition sont :
\begin{compactitem}
  \item Un parallÃ©lÃ©pipÃ©de rectangle donnÃ© par ses trois
  dimensions \verb+A,B,C+ : il peut donc se transformer en cube et
  mÃ©me en dÃ©.
  \item Un quadrillage plan dÃ©fini par son origine, la normale au
  plan et ses limites.
  \item Une ligne.
  \item Un rectangle dÃ©fini comme le quadrillage.
  \item Un polygone.
  \item Un cercle dÃ©fini par la normale Ã© son plan, son origine et
  son rayon, un arc de cercle dÃ©fini comme le cercle avec ses deux angles limites.
  \item Un point de l'espace.
  \item Un tÃ©traÃ©dre donnÃ© par les coordonnÃ©es du centre de sa base et le rayon du
  cercle inscrivant chaque face, que l'on peut faire
  tourner.
  \item Une pyramide Ã© base carrÃ©e donnÃ©e par le demi-cÃ©tÃ© de sa
  base et sa hauteur que l'on peut faire tourner et placer oÃ© on
  veut.
  \item Une sphÃ©re donnÃ©e par les coordonnÃ©es du centre \verb+CX=...+,\verb+CY=...+,\verb+CZ=...+
   et le rayon, que l'on peut faire
  tourner avec les paramÃ©tres
  \verb+RotX=...+,\verb+RotY=...+,\verb+RotZ=...+.
  \item Un cylindre vertical dÃ©fini par son rayon, sa hauteur, que l'on peut faire
  tourner avec les paramÃ©tres
  \verb+RotX=...+,\verb+RotY=...+,\verb+RotZ=...+ et dont le centre
  de la base se placera avec les paramÃ©tres \verb+CX=...+,\verb+CY=...+,\verb+CZ=...+
  \item Un cÃ©ne et tronc de cÃ©ne dÃ©finis par le rayon de la base,
  la hauteur et la fraction de hauteur qu'on souhaite retenir (pour le tronc ce cÃ©ne).
  On peut les placer ou l'on veut et les faire tourner comme les autres Ã©lÃ©ments.
  \item Image d'un texte Ã©crit sur un plan quelconque.
\end{compactitem}

\clearpage
\section{PrÃ©sentation du problÃ©me thÃ©orique}

\begin{center}
\begin{pspicture}(-5,-6)(11,6)
\pnode(0,0){O}
\pnode(! /xA 8 def /yA 5 def  xA yA){A}
\pnode(! /Theta 10 def /xI1 5 Theta cos mul def /yI1 5 Theta sin mul def
        xI1 yI1){I1}
\psline[linecolor=red](I1)(A)
\pnode(!/Alpha1 yA yI1 sub xA xI1 sub atan def
        /iAngle Alpha1 Theta sub def
        /Alpha1' Theta iAngle sub def
        /xP1' xI1 6 Alpha1' cos mul add def
        /yP1' yI1 6 Alpha1' sin mul add def
        xP1' yP1'){P1'}
\psline[linecolor=red](I1)(P1') \pcline[linecolor=blue,nodesepB=-4](O)(I1)
\pnode(!/Theta 20 def /xI2 5 Theta cos mul def /yI2 5 Theta sin mul def xI2 yI2){I2}
\pnode(! 
        /Alpha2 yA yI2 sub xA xI2 sub atan def
        /iAngle Alpha2 Theta sub def
        /Alpha2' Theta iAngle sub def
        /xP2' xI2 6 Alpha2' cos mul add def
        /yP2' yI2 6 Alpha2' sin mul add def
        xP2' yP2'){P2'}
\psline[linecolor=red](I2)(P2')
\pcline[linecolor=blue,nodesepB=-4](O)(I2)
\pnode(!
    /tanAlpha1' Alpha1' dup sin exch cos div def
    /tanAlpha2' Alpha2' dup sin exch cos div def
    /xA' yI2 yI1 sub xI2 tanAlpha2' mul sub xI1 tanAlpha1' mul add
         tanAlpha1' tanAlpha2' sub div def
    /yA' xA' tanAlpha1' mul yI1 add xI1 tanAlpha1' mul sub def
    xA' yA'){A'}
\psdot(A')
\pswedge[fillstyle=solid,fillcolor=black](A'){0.5}{-35}{-5}
\uput{0.5}[-15](A'){$\varepsilon'$}
\psline[linestyle=dashed](A')(I1)
\psline[linestyle=dashed](A')(I2)
\pscircle{5}
\psdot(A)
\psline[linestyle=dotted](O)(A)
\uput[0](A){A}
\uput[45](A'){A'}
\uput[180](O){O}
\uput[80](I2){$\mathrm{I_1}$}
\uput[-135](I1){$\mathrm{I_2}$}
\psline[linestyle=dotted](O)(A')
\pswedge[fillstyle=solid,fillcolor=black](A){2}{224.9}{233.335}
\uput{2.1}[230](A){$\varepsilon$}
\psline[linecolor=red](I2)(A)
\psline[linecolor=red](I1)(A)
\pswedge[fillstyle=solid,fillcolor=black](O){2}{10}{20}
\uput{2.1}[15](O){$\omega$}
\psarc(O){2}{10}{20}
\psarc[doubleline=true](I1){0.75}{10}{53.335}
\psarc[doubleline=true](I1){0.95}{-33.335}{10}
\uput{1}[-12](I1){$i+\mathrm{d}i$}
\psarc(I2){0.75}{20}{44.9}
\psarc(I2){0.95}{-4.9}{20}
\uput{0.8}[31](I2){$i$}
\uput{1}[7.5](I2){$i$}
% \psaxes(0,0)(-5,-6)(10,6)
\end{pspicture}
\end{center}

Il s'agit d'Ã©tudier la rÃ©flexion d'un mince pinceau conique Ã©mis
par~A se rÃ©flÃ©chissant sur le miroir sphÃ©rique et qui pÃ©nÃ©trera dans l'\oe{}il de
l'observateur. C'est un problÃ©me trÃ©s complexe qui a Ã©tÃ© abordÃ©
dans sa gÃ©nÃ©ralitÃ© par Henri Bouasse dans son livre : \textit{Optique supÃ©rieure}, paru en 1917 aux Ã©ditions Delagrave.

Le point lumineux A, quel qu'il soit, est dans le plan du grand
cercle de la sphÃ©re dÃ©fini par $\mathrm{OI_1A}$. Je donne le dÃ©but
de cette Ã©tude thÃ©orique, qui est une adaptation des pages~108 et suivantes de son livre,
sans la dÃ©velopper jusqu'Ã© son terme, car
comme l'indique Henri Bouasse lui-mÃ©me \guillemotleft \textit{ Le
problÃ©me est gÃ©nÃ©ralement inextricable, sauf dans le cas oÃ© la
symÃ©trie du systÃ©me indique quels rayons il faut regrouper aprÃ©s
rÃ©flexion} \guillemotright. Et bien que la fin de cette remarque
s'applique au miroir sphÃ©rique, encore faudrait-il que les calculs
soient facilement programmables et relativement rapides et j'avoue
avoir Ã©tÃ© dÃ©couragÃ© par leur complexitÃ©. Heureusement, nous
verrons que dans certaines conditions, de judicieuses
approximations permettent d'obtenir une solution rÃ©aliste.

Afin d'apprÃ©cier la difficultÃ© du problÃ©me, on considÃ©re d'abord les limites du pinceau 
dans ce plan, c'est Ã© dire sur l'arc  \ARC{\mathrm{\hspace{0.5em}I_1I_2}}.

Les angles sont exagÃ©rÃ©ment grands
pour des raisons de clartÃ©.

Dans le triangle $\mathrm{OI_1A}$,
$$i=\mathrm{\widehat{I_1OA}+\widehat{OAI_1}}$$
Dans le triangle $\mathrm{OI_2A}$,
$$\begin{array}{rcl}
i+\mathrm{d}i&amp;=&amp;\mathrm{\widehat{I_2OA}+\widehat{OAI_2}}\\
&amp;=&amp;\mathrm{\widehat{I_2OI_1}+\widehat{I_1OA}+\widehat{OAI_1}+\widehat{I_1AI_2}}\\
&amp;=&amp;\mathrm{\omega+\widehat{I_1OA}+\widehat{OAI_1}+\varepsilon}
\end{array}
$$
On en dÃ©duit :
\begin{equation}
\mathrm{d}i=\omega+\varepsilon
\label{di_one}
\end{equation}
Dans le triangle $\mathrm{OI_1A'}$
$$i=\mathrm{\pi-(\widehat{I_1OA'}+\widehat{OA'I_1})}$$
Dans le triangle $\mathrm{OI_2A'}$
$$\begin{array}{rcl}
i+\mathrm{d}i&amp;=&amp;\pi-(\mathrm{\widehat{I_2OA'}+\widehat{OA'I_2})}\\
&amp;=&amp;\pi-\left(\mathrm{(\widehat{I_2OI_1}+\widehat{I_1OA'})+(\widehat{OAI'_1}-\widehat{I_1A'I_2})}\right)\\
&amp;=&amp;\pi-\left(\mathrm{(\omega+\widehat{I_1OA'})+(\widehat{OA'I_1}-\varepsilon')}\right)
\end{array}
$$
On en dÃ©duit :
\begin{equation}
\mathrm{d}i=-\omega+\varepsilon'
\label{di_two}
\end{equation}
En rapprochant (\ref{di_one}) et (\ref{di_two}) :
\begin{equation}
\omega+\varepsilon=-\omega+\varepsilon'\Longleftrightarrow2\omega=\varepsilon'-\varepsilon
\label{omega}
\end{equation}
En se rappelant qu'en rÃ©alitÃ© $\varepsilon$, $\varepsilon'$ et
$\omega$ sont de petits angles, on Ã©tablit les relations
suivantes, en posant :
$$t=\mathrm{AI_1}\textrm{ et } t'=\mathrm{A'I_1}$$
$$\mathrm{d}s=\ARC{\mathrm{\hspace{0.5em}I_1I_2}}=R\omega=\frac{t\varepsilon}{\cos i}=\frac{t'\varepsilon'}{\cos i}$$
$$\varepsilon=\frac{\mathrm{R}\omega\cos i}{t}\qquad\varepsilon'=\frac{\mathrm{R}\omega\cos
i}{t'}$$
Compte-tenu de la relation (\ref{omega}), on en dÃ©duit la formule
fondamentale :
$$\frac{1}{t'}-\frac{1}{t}=\frac{2}{\mathrm{R}\cos i}$$
S'il n'y avait que le faisceau de rayons balayant depuis A l'arc
\ARC{\mathrm{I_1I_2}}, l'image virtuelle que verrait
l'\oe{}il serait $\mathrm{A'}$, qui est dans ce plan la trace de la
\textit{focale tangentielle}.

Il faut maintenant envisager toutes les autres gÃ©nÃ©ratrices du
cÃ©ne. On en prend deux de particuliÃ©res, celles qui sont sur les
bouts de l'arc de cercle de la sphÃ©re perpendiculaire au grand
cercle prÃ©cÃ©dent. Nous ne pouvons plus nous placer maintenant dans
un plan pour faire le schÃ©ma. Ces deux gÃ©nÃ©ratrices permettent de
dÃ©terminer la \textit{focale radiale} $\mathrm{A''}$. Les deux focales $\mathrm{A'}$ et
$\mathrm{A''}$ sont alignÃ©es avec le rayon rÃ©flÃ©chi correspondant
au rayon moyen du pinceau incident.


En conclusion, Ã© la page 134, Henri Bouasse Ã©crit :
  \guillemotleft \textit{ l'\oe{}il n'utilise qu'un pinceau
  extrÃ©mement Ã©troit ; il s'accommode sur l'une des focales ou sur le cercle de
  diffusion.} \guillemotright. Nous avons un peu avancÃ©, mais quel(s) point(s)
  calculer?

Les milieux des focales tangentielles, radiales et du cercle de
diffusion se trouvent alignÃ©s avec l'\oe{}il et le point
d'incidence du rayon moyen du faisceau (celui qui aprÃ©s rÃ©flexion
passe par l'\oe{}il). L'image obtenue d'un objet quelconque n'est
 pas plane. On pourrait contourner la difficultÃ© en imaginant un plan
 fictif perpendiculaire Ã&nbsp; l'axe \oe{}il-centre de la boule et
 passant par une valeur moyenne des cercles de diffusion, sur
 lequel on calculerait les intersections des rayons. Il faut bien
 reconnaÃ©tre que tout cela est passablement compliquÃ©.

Henri Bouasse propose, dans certaines conditions, une mÃ©thode approximative qui donne de bons
rÃ©sultats et qui a l'avantage d'Ã©tre simple. C'est
l'intÃ©gralitÃ© de cette solution qu'il donne dans les
pages 133, 134 et 135 de son livre, qui est dÃ©veloppÃ©e ci-aprÃ©s.

\section{Vision dans une boule de jardin}
\begin{center}
\begin{pspicture}(-5,-2)(8,14)
\pscircle{2}
\psline[linewidth=0.8mm](8,0.2)(8,14) \psline[linewidth=0.8mm](8,-0.2)(8,-2)
\psline(-5,0)(8.2,0)\psline(4;30)\psarc(0,0){1}{0}{30}\uput[15](1;15){$i$}
\pnode(!2 30 cos mul 2 30 sin mul){I}
\psline[linestyle=dashed](!0  2 30 sin mul)(I) \psline(!0 2 30 sin mul)(0,0)
\uput[180](!0 1 30 sin mul){$\rho'$} \psline(I)(!8 2 30 sin mul)
\rput(I){\psarc(0,0){1}{0}{30} \uput[15](1;15){$i$}
\psline(! /IH 8 2 30 cos mul sub 2 mul def IH 60 cos mul IH 60 sin mul)}
\uput[270](0,0){C} \uput[45](8,0){T} \uput[180](8,-2){E} \uput[180](-2,0){B}
\uput[270](5,0){D} \uput[180](8,6){$\rho$}
\end{pspicture}
\end{center}

\itemBoua Pour effectuer les expÃ©riences suivantes, on se sert
d'une boule de jardin achetÃ©e dans un bazar, ou d'un petit ballon
de verre de 5~cm de diamÃ©tre environ dont on argente la surface
extÃ©rieure. On peut argenter extÃ©rieurement une bille d'ivoire.

Sur une trÃ©s grande feuille de carton blanc E, on trace un
quadrillage en traits noirs Ã©pais. On regarde l'image de ce
quadrillage par un petit trou percÃ© au centre du carton.

La distance $\mathrm{D=TB}$ sera prise d'une trentaine de
centimÃ©tres.

Le quadrillage apparaÃ©t dÃ©formÃ© \textit{en barillet}, mais
\textit{parfaitement net}.

\itemBoua
Pour avoir une idÃ©e de la loi de dÃ©formation supposons l'\oe{}il
assez loin pour que les rayons rÃ©flÃ©chis qui y parviennent, soient
quasi-parallÃ©les. Appelons $\rho'$ la distance d'un rayon Ã© la
droite TB.

Soit R le rayon de la boule. l'angle d'incidence est :
$$i=\arcsin(\rho':\mathrm{R})$$
Le point oÃ© le rayon conjuguÃ© coupe l'Ã©cran E, est Ã© une distance
$\rho$ de TB donnÃ©e par la formule~:
$$\rho=\mathrm{D}\tan2i$$
D'oÃ© la loi approchÃ©e :
$$\arctan\frac{\rho}{\mathrm{D}}=2\arcsin\frac{\rho'}{\mathrm{R}}$$
$\rho$ devient infini pour :
$$\arcsin(\rho':\mathrm{R})=45^\mathrm{o}\qquad \rho'=0.7\mathrm{R}$$
En consÃ©quence, si grand que soit le carton, son image occupera
moins des sept dixiÃ©mes du diamÃ©tre.

\section{Exemples}
\begin{pspicture}(-8,-8)(8,8)
\pstSphereFrame[normale=0 90,Xorigine=50,Yorigine=0,Zorigine=-20,fillstyle=solid,
  fillcolor=OrangePale](-70,-50)(70,50)
\pstSphereGrid[normale=0 90,linecolor=blue,linewidth=0.2mm,grille=10,
  Ymin=-50,Ymax=50,Xmax=70,Xmin=-70](50,0,-20)
{\psset{fillstyle=solid,fillstyle=solid,fillcolor=GrisClair,A=5,B=A,C=A}
\multido{\iX=95+-20}{4}{\multido{\iZ=55+-10}{6}{\psset{CX=\iX,CZ=\iZ,CY=45}\pstSphereCube}
                        \multido{\iZ=-15+10}{2}{\psset{CX=\iX,CZ=\iZ,CY=45}\pstSphereCube}
                        \multido{\iZ=55+-10}{6}{\psset{CX=\iX,CZ=\iZ,CY=-45}\pstSphereCube}
                        \multido{\iZ=-15+10}{2}{\psset{CX=\iX,CZ=\iZ,CY=-45}\pstSphereCube}
                        \multido{\iY=35+-10}{4}{\psset{CX=\iX,CZ=55,CY=\iY}\pstSphereCube}
                        \multido{\iY=-35+10}{4}{\psset{CX=\iX,CZ=55,CY=\iY}\pstSphereCube}}}
\multido{\iZ=-15+10,\iRotZ=20+45}{2}{%
  \psset{fillstyle=solid,fillstyle=gradient,fillcolor=GrisClair,A=5,B=A,C=A,
         CX=5,CY=-65,CZ=\iZ,RotZ=\iRotZ}\pstSphereCube}
\multido{\iZ=-15+10}{2}{%
  \psset{fillstyle=solid,fillstyle=solid,fillcolor=GrisClair,A=5,B=A,C=A,CX=15,CY=45,CZ=\iZ}\pstSphereCube
  \psset{CY=-45}\pstSphereCube}
\multido{\iZ=15+-10,\iRotZ=30+30}{2}{%
  \psset{fillstyle=solid,fillstyle=solid,fillcolor=GrisClair,A=5,B=A,C=A,
    CX=15,CY=45,CZ=\iZ,RotZ=\iRotZ}\pstSphereCube}
\multido{\iZ=25+-10,\iRotZ=30+20}{3}{%
  \psset{fillstyle=solid,fillstyle=solid,fillcolor=GrisClair,A=5,B=A,C=A,
    CX=15,CY=-45,CZ=\iZ,RotZ=\iRotZ}\pstSphereCube}
\multido{\iX=95+-20}{5}{\multido{\iY=-25+10}{6}{%
  \psset{fillstyle=gradient,gradbegin=white,gradend=red,gradmidpoint=0.2,linewidth=0.05mm,
    CY=\iY,CZ=-20,CX=\iX}
  \ifnum\iX=15
    \ifnum\iY=-15 {\psset{RotY=90,RotZ=-45,CZ=-17.5}\pstSphereCylinder{2.5}{-10}}
    \else \pstSphereCylinder{2.5}{10}\fi
  \else\pstSphereCylinder{2.5}{10}\fi}}
\multido{\iY=25+-10,\iRotY=0+60}{6}{%
  \psset{fillstyle=solid,linewidth=0.05mm,CX=55,CY=\iY,CZ=-10,A=2.5,Hpyramide=5}\pstSpherePyramide}
\multido{\iY=25+-10,\iRotY=0+60}{6}{%
  \psset{fillstyle=gradient,gradbegin=white,gradend=red,gradmidpoint=0.2,
    linewidth=0.05mm,CX=35,CY=\iY,CZ=-10}\pstSphereCone{2.5}{2.5}}
\multido{\iY=25+-10,\iRotY=0+60}{6}{%
\psset{fillstyle=gradient,gradbegin=white,gradend=blue,gradmidpoint=0.2,linecolor=cyan,linewidth=0.1mm}
\ifnum\iY=-15 {\psset{CX=7.5,CY=-5,CZ=-17.5,RotY=\iRotY} \pstMirrorSphere{2.5}}
\else {\psset{CX=15,CY=\iY,CZ=-7.5,RotY=\iRotY}\pstMirrorSphere{2.5}}\fi}
\psset{CX=2.5,CZ=-10,CY=15,fracHcone=0.5,linecolor=red,fillstyle=gradient,gradbegin=yellow,
  gradend=red,gradmidpoint=0,linewidth=0.05mm}
\pstSphereCone{2.5}{5}
{\psset{RotX=0,RotZ=20,RotY=30,CX=2.5,CZ=-10,CY=2.5,fillstyle=solid,linecolor=black,A=2,Hpyramide=3}
\pstSpherePyramide}
{\psset{linecolor=red,CZ=5,A=2.5,B=A,C=A,RotZ=-50,RotX=20,RotY=30,CY=0,CX=20,%
  fillstyle=solid,fillcolor=OrangePale}
\pstSphereDie}
\end{pspicture}

\begin{lstlisting}
\begin{pspicture}(-8,-8)(8,8)
\pstSphereFrame[normale=0 90,Xorigine=50,Yorigine=0,Zorigine=-20,fillstyle=solid,
  fillcolor=OrangePale](-70,-50)(70,50)
\pstSphereGrid[normale=0 90,linecolor=blue,linewidth=0.2mm,grille=10,
  Ymin=-50,Ymax=50,Xmax=70,Xmin=-70](50,0,-20)
{\psset{fillstyle=solid,fillstyle=solid,fillcolor=GrisClair,A=5,B=A,C=A}
\multido{\iX=95+-20}{4}{\multido{\iZ=55+-10}{6}{\psset{CX=\iX,CZ=\iZ,CY=45}\pstSphereCube}
                        \multido{\iZ=-15+10}{2}{\psset{CX=\iX,CZ=\iZ,CY=45}\pstSphereCube}
                        \multido{\iZ=55+-10}{6}{\psset{CX=\iX,CZ=\iZ,CY=-45}\pstSphereCube}
                        \multido{\iZ=-15+10}{2}{\psset{CX=\iX,CZ=\iZ,CY=-45}\pstSphereCube}
                        \multido{\iY=35+-10}{4}{\psset{CX=\iX,CZ=55,CY=\iY}\pstSphereCube}
                        \multido{\iY=-35+10}{4}{\psset{CX=\iX,CZ=55,CY=\iY}\pstSphereCube}}}
\multido{\iZ=-15+10,\iRotZ=20+45}{2}{%
  \psset{fillstyle=solid,fillstyle=gradient,fillcolor=GrisClair,A=5,B=A,C=A,
         CX=5,CY=-65,CZ=\iZ,RotZ=\iRotZ}\pstSphereCube}
\multido{\iZ=-15+10}{2}{%
  \psset{fillstyle=solid,fillstyle=solid,fillcolor=GrisClair,A=5,B=A,C=A,CX=15,CY=45,CZ=\iZ}\pstSphereCube
  \psset{CY=-45}\pstSphereCube}
\multido{\iZ=15+-10,\iRotZ=30+30}{2}{%
  \psset{fillstyle=solid,fillstyle=solid,fillcolor=GrisClair,A=5,B=A,C=A,
    CX=15,CY=45,CZ=\iZ,RotZ=\iRotZ}\pstSphereCube}
\multido{\iZ=25+-10,\iRotZ=30+20}{3}{%
  \psset{fillstyle=solid,fillstyle=solid,fillcolor=GrisClair,A=5,B=A,C=A,
    CX=15,CY=-45,CZ=\iZ,RotZ=\iRotZ}\pstSphereCube}
\multido{\iX=95+-20}{5}{\multido{\iY=-25+10}{6}{%
  \psset{fillstyle=gradient,gradbegin=white,gradend=red,gradmidpoint=0.2,linewidth=0.05mm,
    CY=\iY,CZ=-20,CX=\iX}
  \ifnum\iX=15
    \ifnum\iY=-15 {\psset{RotY=90,RotZ=-45,CZ=-17.5}\pstSphereCylinder{2.5}{-10}}
    \else \pstSphereCylinder{2.5}{10}\fi
  \else\pstSphereCylinder{2.5}{10}\fi}}
\multido{\iY=25+-10,\iRotY=0+60}{6}{%
  \psset{fillstyle=solid,linewidth=0.05mm,CX=55,CY=\iY,CZ=-10,A=2.5,Hpyramide=5}\pstSpherePyramide}
\multido{\iY=25+-10,\iRotY=0+60}{6}{%
  \psset{fillstyle=gradient,gradbegin=white,gradend=red,gradmidpoint=0.2,
    linewidth=0.05mm,CX=35,CY=\iY,CZ=-10}\pstSphereCone{2.5}{2.5}}
\multido{\iY=25+-10,\iRotY=0+60}{6}{%
\psset{fillstyle=gradient,gradbegin=white,gradend=blue,gradmidpoint=0.2,linecolor=cyan,linewidth=0.1mm}
\ifnum\iY=-15 {\psset{CX=7.5,CY=-5,CZ=-17.5,RotY=\iRotY} \pstMirrorSphere{2.5}}
\else {\psset{CX=15,CY=\iY,CZ=-7.5,RotY=\iRotY}\pstMirrorSphere{2.5}}\fi}
\psset{CX=2.5,CZ=-10,CY=15,fracHcone=0.5,linecolor=red,fillstyle=gradient,gradbegin=yellow,
  gradend=red,gradmidpoint=0,linewidth=0.05mm}
\pstSphereCone{2.5}{5}
{\psset{RotX=0,RotZ=20,RotY=30,CX=2.5,CZ=-10,CY=2.5,fillstyle=solid,linecolor=black,A=2,Hpyramide=3}
\pstSpherePyramide}
{\psset{linecolor=red,CZ=5,A=2.5,B=A,C=A,RotZ=-50,RotX=20,RotY=30,CY=0,CX=20,%
  fillstyle=solid,fillcolor=OrangePale}
\pstSphereDie}
\end{pspicture}
\end{lstlisting}






\begin{pspicture}(-8,-8)(8,8)
%\psset{scale=2}
\pstSphereFrame[Xorigine=20,Yorigine=0,Zorigine=0,fillstyle=solid,fillcolor=OrangePale](-70,-50)(70,10)
\pstSphereGrid[linecolor=blue,linewidth=0.2mm,grille=5,Ymin=-50,Ymax=50,Xmax=70,Xmin=-70](20,0,0)%
%
\pstSphereFrame[normale=90 0,Xorigine=10,Yorigine=70,Zorigine=0,fillstyle=solid,fillcolor=yellow](-10,-50)(10,10)
\multido{\nX=17.5+-10.0}{2}{%
  \multido{\nY=-67.5+10.0}{14}{%
    \pstSphereFrame[normale=0 90,Xorigine=\nX,Yorigine=\nY,Zorigine=-10,fillstyle=solid,
      fillcolor=yellow](-2.5,-2.5)(2.5,2.5)}}
\multido{\nX=12.5+-10.0}{2}{%
  \multido{\nY=-62.5+10.0}{14}{%
    \pstSphereFrame[normale=0 90,Xorigine=\nX,Yorigine=\nY,Zorigine=-10,fillstyle=solid,
      fillcolor=yellow](-2.5,-2.5)(2.5,2.5)}}
\pstSphereGrid[normale=90 0,linecolor=blue,linewidth=0.2mm,grille=5,
  Xmin=-10,Xmax=10,Ymax=10,Ymin=-50](10,70,0)%
\pstSphereGrid[normale=0 90,linecolor=blue,linewidth=0.2mm,grille=5,
  Xmin=-70,Xmax=70,Ymax=10,Ymin=-10](10,0,-10)%
{\psset{linecolor=black,CZ=52,A=5,B=70,C=2,CY=0,CX=15,fillstyle=solid}\pstSphereCube}
{\psset{linecolor=red,CX=15,A=5,B=A,C=A,CY=-10,CZ=-5,RotZ=0,fillstyle=solid,fillcolor=blue}\pstSphereDie}%
\multido{\nZ=47.5+-5.0}{10}{%
  \psset{linecolor=red,CY=22.5,A=2.5,B=A,C=A,CZ=\nZ,CX=17.5,fillstyle=solid}\pstSphereCube}
\multido{\nZ=-7.5+5.0}{2}{%
  \psset{linecolor=red,CY=22.5,A=2.5,B=A,C=A,CZ=\nZ,CX=17.5,fillstyle=solid}\pstSphereCube}
{\psset{fillstyle=gradient,gradbegin=white,gradend=blue,gradmidpoint=0.2,linecolor=cyan,linewidth=0.1mm,%
  CX=15,RotX=45,RotY=60}
\pstMirrorSphere{5}}
{\psset{fillstyle=gradient,gradbegin=white,gradend=red,gradmidpoint=0.2,linewidth=0.1mm,CX=10,CY=20,CZ=-10}
\pstSphereCylinder{5}{7.5}}
{\psset{fillstyle=gradient,gradbegin=white,gradend=red,gradmidpoint=0.2,linewidth=0.1mm,%
    CX=15,CY=10,CZ=-7.5,RotY=90,RotX=-45}\pstSphereCylinder{2.5}{-10}}
{\psset{linecolor=red,CX=10,A=2.5,B=A,C=A,CY=-40,CZ=-7.5,RotZ=60,fillstyle=solid,fillcolor=yellow}\pstSphereDie}%
{\psset{CZ=-10,CY=-2.5,CX=2.5,RotZ=-20,linecolor=black,fillstyle=gradient,Rtetraedre=2.5}\pstSphereTetraedre}
\multido{\nY=-67.5+10.0}{9}{%
  {\psset{linecolor=blue,CZ=17.5,A=1,B=2.5,C=2.5,CY=\nY,CX=19,fillstyle=solid,linewidth=0.1mm}\pstSphereCube}}
\multido{\nY=-62.5+10.0}{8}{\psset{RotX=0,RotZ=0,RotY=-90,CX=20,CZ=12.5,CY=\nY,
  fillstyle=solid,linecolor=black,A=2.5,Hpyramide=3}\pstSpherePyramide}
\end{pspicture}

\begin{lstlisting}
\begin{pspicture}(-8,-8)(8,8)
%\psset{scale=2}
\pstSphereFrame[Xorigine=20,Yorigine=0,Zorigine=0,fillstyle=solid,fillcolor=OrangePale](-70,-50)(70,10)
\pstSphereGrid[linecolor=blue,linewidth=0.2mm,grille=5,Ymin=-50,Ymax=50,Xmax=70,Xmin=-70](20,0,0)%
%
\pstSphereFrame[normale=90 0,Xorigine=10,Yorigine=70,Zorigine=0,fillstyle=solid,fillcolor=yellow](-10,-50)(10,10)
\multido{\nX=17.5+-10.0}{2}{%
  \multido{\nY=-67.5+10.0}{14}{%
    \pstSphereFrame[normale=0 90,Xorigine=\nX,Yorigine=\nY,Zorigine=-10,fillstyle=solid,
      fillcolor=yellow](-2.5,-2.5)(2.5,2.5)}}
\multido{\nX=12.5+-10.0}{2}{%
  \multido{\nY=-62.5+10.0}{14}{%
    \pstSphereFrame[normale=0 90,Xorigine=\nX,Yorigine=\nY,Zorigine=-10,fillstyle=solid,
      fillcolor=yellow](-2.5,-2.5)(2.5,2.5)}}
\pstSphereGrid[normale=90 0,linecolor=blue,linewidth=0.2mm,grille=5,
  Xmin=-10,Xmax=10,Ymax=10,Ymin=-50](10,70,0)%
\pstSphereGrid[normale=0 90,linecolor=blue,linewidth=0.2mm,grille=5,
  Xmin=-70,Xmax=70,Ymax=10,Ymin=-10](10,0,-10)%
{\psset{linecolor=black,CZ=52,A=5,B=70,C=2,CY=0,CX=15,fillstyle=solid}\pstSphereCube}
{\psset{linecolor=red,CX=15,A=5,B=A,C=A,CY=-10,CZ=-5,RotZ=0,fillstyle=solid,fillcolor=blue}\pstSphereDie}%
\multido{\nZ=47.5+-5.0}{10}{%
  \psset{linecolor=red,CY=22.5,A=2.5,B=A,C=A,CZ=\nZ,CX=17.5,fillstyle=solid}\pstSphereCube}
\multido{\nZ=-7.5+5.0}{2}{%
  \psset{linecolor=red,CY=22.5,A=2.5,B=A,C=A,CZ=\nZ,CX=17.5,fillstyle=solid}\pstSphereCube}
{\psset{fillstyle=gradient,gradbegin=white,gradend=blue,gradmidpoint=0.2,linecolor=cyan,linewidth=0.1mm,%
  CX=15,RotX=45,RotY=60}
\pstMirrorSphere{5}}
{\psset{fillstyle=gradient,gradbegin=white,gradend=red,gradmidpoint=0.2,linewidth=0.1mm,CX=10,CY=20,CZ=-10}
\pstSphereCylinder{5}{7.5}}
{\psset{fillstyle=gradient,gradbegin=white,gradend=red,gradmidpoint=0.2,linewidth=0.1mm,%
    CX=15,CY=10,CZ=-7.5,RotY=90,RotX=-45}\pstSphereCylinder{2.5}{-10}}
{\psset{linecolor=red,CX=10,A=2.5,B=A,C=A,CY=-40,CZ=-7.5,RotZ=60,fillstyle=solid,fillcolor=yellow}\pstSphereDie}%
{\psset{CZ=-10,CY=-2.5,CX=2.5,RotZ=-20,linecolor=black,fillstyle=gradient,Rtetraedre=2.5}\pstSphereTetraedre}
\multido{\nY=-67.5+10.0}{9}{%
  {\psset{linecolor=blue,CZ=17.5,A=1,B=2.5,C=2.5,CY=\nY,CX=19,fillstyle=solid,linewidth=0.1mm}\pstSphereCube}}
\multido{\nY=-62.5+10.0}{8}{\psset{RotX=0,RotZ=0,RotY=-90,CX=20,CZ=12.5,CY=\nY,
  fillstyle=solid,linecolor=black,A=2.5,Hpyramide=3}\pstSpherePyramide}
\end{pspicture}
\end{lstlisting}


\clearpage
\section{Utilisation des briques}
\subsection{Le repÃ©re}
l'origine est placÃ©e contre la boule, sur l'horizontale joignant le
centre~C de la boule Ã© l'\oe{}il de l'observateur. O$z$ est
vertical, O$xy$ forme le plan horizontal. Tous les objets seront
donc placÃ©s au-delÃ© de O avec $x&gt;0$.
\begin{center}
\begin{pspicture}(-2,-2)(10,5)
\pscircle{2}
\rput(2,0){%
\psline{-&gt;}(5,0)
\psline{-&gt;}(0,5)
\psline{-&gt;}(4;30)
\uput[-90](5,0){$x$}
\uput[180](0,5){$z$}
\uput[30](4;30){$y$}}
\rput(10,0){\oeil}
\uput[180](2,0){O}
\psdot(0,0)
\end{pspicture}
\end{center}

\subsection{Placer un quadrillage}
Le plan du quadrillage est dÃ©fini par une origine
(\textsf{Xorigine,Yorigine,Zorigine}), le vecteur unitaire normal au plan donnÃ© par
sa longitude et sa latitude $(\theta,\phi)$ lesquelles sont paramÃ©trÃ©es, avec des valeurs en degrÃ©s avec :
\textsf{%
\begin{compactitem}
  \item normale =$\theta$ $\phi$
\end{compactitem}}
Un vecteur unitaire quelconque a pour coordonnÃ©es, en fonction de $\theta$ et $\phi$ :
$$
\vec{u}=\left(
\begin{array}{c}
\cos\theta\cos\phi\\
\sin\theta\cos\phi\\
\sin\phi
\end{array}
\right)
$$
$\vec{i},\vec{j},\vec{k}$ sont les vecteurs unitaires dirigÃ©s
respectivement suivant O$x$, O$y$ et O$z$.

Le vecteur unitaire normal Ã© un plan de front, c'est-Ã©-dire parallÃ©le Ã© O$yz$,
est le vecteur $\vec{i}$
ou $-\vec{i}$, $\vec{u}(\theta=0\textrm{ ou } \pi,\phi=0)$.

Un plan horizontal est parallÃ©le Ã© O$xy$, un vecteur normal est
soit $\vec{k}$, soit $-\vec{k}$, il est dÃ©fini par
$\vec{u}(\theta=\textrm{valeur indiffÃ©rente} (0),\phi=\pi/2\textrm{ ou }-\pi/2)$.

Un plan vertical parallÃ©le Ã© O$xz$ a pour normale $\vec{j}$ ou
$-\vec{j}$, donc $\theta=\pi/2\textrm{ ou }-\pi/2$ et $\phi=0$.

\textbf{Une remarque importante} : le vecteur unitaire choisi normal au plan $\vec{u}$, dÃ©termine
l'orientation des vecteurs $\vec{I}$ et $\vec{J}$ du plan, avec
les rÃ©gles habituelles d'orientation : le triÃ©dre $(\vec{I},\vec{J},\vec{u})$ est direct,
 \textbf{ mais le vecteur $\vec{I}$ a Ã©tÃ©pris dans le plan de rÃ©fÃ©rence O$xy$}.

%$
Pour que le quadrillage soit parfaitement dÃ©terminÃ©, on fixe les
valeurs de deux sommets opposÃ© avec :
\textsf{Ymin=-50,Ymax=10,Xmax=70,Xmin=-70}. Ainsi que le pas de la
grille avec \textsf{grille=10}, par exemple.
\begin{center}
\begin{pspicture}(-5,-4)(5,5)
  \decor
  % les graduations
  \multido{\iY=-70+10}{15}{%
    \pstSpherePoint(40,\iY,0){A}
    \uput[90](A){\footnotesize\red\iY}}
  \multido{\iX=10+10}{4}{%
    \pstSpherePoint(\iX,0,-10){A}
    \uput[-45](A){\footnotesize\blue\iX}}
  \multido{\iZ=-10+10}{7}{%
    \pstSpherePoint(40,0,\iZ){A}
    \uput[135](A){\footnotesize\green\iZ}}
\end{pspicture}
\end{center}


\begin{lstlisting}
\begin{pspicture}(-5,-4)(5,5)
  \decor% les graduations, see preamble
  \multido{\iY=-70+10}{15}{\pstSpherePoint(40,\iY,0){A}\uput[90](A){\footnotesize\red\iY}}
  \multido{\iX=10+10}{4}{\pstSpherePoint(\iX,0,-10){A} \uput[-45](A){\footnotesize\blue\iX}}
  \multido{\iZ=-10+10}{7}{\pstSpherePoint(40,0,\iZ){A} \uput[135](A){\footnotesize\green\iZ}}
\end{pspicture}
\end{lstlisting}


En bleu graduations de l'axe O$x$, en rouge celles de O$x$ et en
vert celles de O$z$.

Le quadrillage du plan de front est dÃ©fini par :

\begin{lstlisting}
\pstSphereGrid[normale=0 0,% default
  linecolor=blue,linewidth=0.2mm,grille=10,Ymin=-50,Ymax=10,Xmax=70,Xmin=-70](40,0,0)%
\end{lstlisting}
Le quadrillage du plan horizontal par :

\begin{lstlisting}
\pstSphereGrid[normale=0 90,linecolor=blue,linewidth=0.2mm,grille=10,
    Ymin=-30,Ymax=0,Xmax=70,Xmin=-70](40,0,-10)%
\end{lstlisting}

Les quadrillages des plans latÃ©raux par :

\begin{lstlisting}
\pstSphereGrid[normale=90 0,linecolor=blue,linewidth=0.05mm,grille=10,
    Ymin=-60,Ymax=0,Xmin=-30,Xmax=0](40,70,-10)
\pstSphereGrid[normale=90 0,linecolor=blue,linewidth=0.05mm,grille=10,%
    Ymin=-60,Ymax=0,Xmin=-30,Xmax=0](40,-70,-10)
\end{lstlisting}

On peut se rendre compte de ce qui se produit en changeant l'orientation
du vecteur normal. J'inverse l'orientation de la normale pour les quatre plans.

On obtient la mÃ©me chose que prÃ©cÃ©demment en faisant :

\begin{lstlisting}
\begin{pspicture}(-5,-4)(5,4)
% plan de front
\psset{Sphere=false}
{\psset{normale=180 0,Xorigine=40,Yorigine=0,Zorigine=0}
\pstSphereFrame[fillstyle=solid,fillcolor=OrangePale](-70,-50)(70,10)
\pstSphereGrid[linecolor=blue,linewidth=0.2mm,grille=10,
                  Ymin=-50,Ymax=10,Xmax=70,Xmin=-70](40,0,0)}
% plan horizontal
{\psset{normale=0 -90,Xorigine=40,Yorigine=0,Zorigine=-10}
\pstSphereFrame[fillstyle=solid,fillcolor=cyan](70,30)(-70,0)
\pstSphereGrid[linecolor=blue,linewidth=0.2mm,grille=10,
  Ymin=0,Ymax=30,Xmax=70,Xmin=-70](40,0,-10)}%
% plan vertical de gauche
{\psset{normale=-90 0,Xorigine=40,Yorigine=70,Zorigine=-10}
\pstSphereFrame[fillstyle=solid,fillcolor=yellow](0,0)(30,-60)
\pstSphereGrid[linecolor=blue,linewidth=0.05mm,grille=10,
  Ymin=-60,Ymax=0,Xmin=0,Xmax=30](40,70,-10)}
% plan vertical a droite
{\psset{normale=-90 0,Xorigine=40,Yorigine=-70,Zorigine=-10}
\pstSphereFrame[fillstyle=solid,fillcolor=yellow](0,0)(30,-60)
\pstSphereGrid[linecolor=blue,linewidth=0.05mm,grille=10,Ymin=-60,
  Ymax=0,Xmin=0,Xmax=30](40,-70,-10)}
\end{pspicture}
\end{lstlisting}


\subsection{Dessiner un rectangle}
Dans l'exemple prÃ©cÃ©dent, j'ai dessinÃ© les rectangles
correspondants aux quadrillages. La commande est identique Ã© celle
du quadrillage avec les mÃ©mes paramÃ©tres pour l'origine et le
vecteur normal au plan. On donne les coordonnÃ©es de deux sommets
opposÃ©s comme dans la commande \verb+\psframe+ de PSTricks, dans le
plan.

\subsection{Tracer une ligne, marquer un point}
Un segment de droite est dÃ©terminÃ© par les coordonnÃ©es de ses
extrÃ©mitÃ©s. Un point par ses coordonnÃ©es. On peut tracer une ligne brisÃ©e en plaÃ©ant les points Ã© la suite, comme dans la commande de PStricks \verb+\psline+.
\begin{lstlisting}
\pstSpherePoint(40,0,40){A}
\pstSpherePoint(10,-40,-10){B}
\pstSpherePoint(10,40,-10){C}
\psdots[dotsize=1mm,linecolor=green](A)(B)(C)
\pstSphereLine[linecolor=red](10,40,-10)(40,0,40)(10,-40,-10)
\end{lstlisting}
Vous remarquerez que les coordonnÃ©es de $y$ sont inversÃ©es. Je
rappelle que le plan couleur \textsf{cyan} est Ã© la cote $z=-10$.
\begin{center}
\begin{pspicture}(-5,-4)(5,5)
\decor
\pstSphereLine[linecolor=red,linewidth=1mm](10,40,-10)(40,0,40)(10,-40,-10)
\pstSpherePoint(40,0,40){A}
\pstSpherePoint(10,-40,-10){B}
\pstSpherePoint(10,40,-10){C}
\psdots[dotsize=2mm,linecolor=green](A)(B)(C)
\end{pspicture}
\end{center}

\subsection{Dessiner un polygone}
Commande identique Ã© celle de PStricks.
\begin{lstlisting}
\pstSpherePolygon[options](x0,y0,z0)(x1,y1,z1)...(xn,yn,zn)
\end{lstlisting}

\clearpage
\subsection{ParallÃ©lÃ©pipÃ©de}
Le parallÃ©lÃ©pipÃ©de est dÃ©fini par ses trois dimensions
\textsf{A,B,C}. On peut le dÃ©placer en fixant les coordonnÃ©es de
son centre avec : \textsf{CX,CY,CZ} et le faire tourner avec autour
des axes avec : \textsf{RotX,RotY,RotZ} dont les valeurs sont par dÃ©fauts, positionnÃ©es Ã© 0.
\begin{lstlisting}
\psset{A=2.5,B=5,C=A,fillstyle=solid,fillcolor=GrisClair,linecolor=red}
\psset{CX=10,CZ=-5,CY=0}
\pstSphereCube
\end{lstlisting}
\begin{center}
\begin{pspicture}(-5,-4)(5,5)
\decor
\psset{A=2.5,B=5,C=A,fillstyle=solid,fillcolor=GrisClair,linecolor=red}
\psset{CX=15,CZ=-5,CY=0}
\pstSphereCube
\end{pspicture}
\end{center}

On le fait tourner autour de O$z$ avec \Lkeyword{RotZ}=30 etc.

\begin{center}
\begin{pspicture}(-5,-4)(5,5)
\decor
\psset{A=2.5,B=5,C=A,fillstyle=solid,fillcolor=GrisClair,linecolor=red}
\psset{CX=15,CZ=-5,CY=0,RotZ=30}
\pstSphereCube
\end{pspicture}
\end{center}

\begin{lstlisting}
\psset{CX=15,CZ=-5,CY=0,RotZ=30}
\end{lstlisting}




\clearpage
\subsection{Le dÃ©}
Le dÃ© possÃ©de une commande propre \Lcs{pstSphereDie}, qui en interne utilise celle
du \Lcs{pstSphereCube} en affichant les points. Voici quelques dÃ©s.
\begin{center}
\begin{pspicture}(-5,-4)(5,5)
\decor
\psset{A=2.5,B=A,C=A,fillstyle=solid,fillcolor=GrisClair,linecolor=red}
\psset{CX=15,CZ=-5,CY=10,RotZ=60,RotX=90}
\pstSphereDie
\psset{A=5,B=A,C=A,fillstyle=solid,fillcolor=OrangeTresPale,linecolor=red}
\psset{CX=25,CZ=5,CY=-5,RotZ=45,RotY=20,RotX=-60}
\pstSphereDie
\end{pspicture}
\end{center}

\begin{lstlisting}
\psset{A=2.5,B=A,C=A,fillstyle=solid,fillcolor=GrisClair,linecolor=red}
\psset{CX=15,CZ=-5,CY=10,RotZ=60,RotX=90}
\pstSphereDie
\psset{A=5,B=A,C=A,fillstyle=solid,fillcolor=OrangeTresPale,linecolor=red}
\psset{CX=25,CZ=5,CY=-5,RotZ=45,RotY=20,RotX=-60}
\pstSphereDie
\end{lstlisting}

\subsection{Tracer un cercle ou un arc de cercle}
Le cercle et l'arc de cercle seront dÃ©finis par le plan auquel ils
appartiennent. Comme prÃ©cÃ©demment le plan sera dÃ©fini par une
origine et le vecteur unitaire normal Ã© ce plan. Ces donnÃ©es Ã©tant
posÃ©es, il n'y plus que le rayon du cercle Ã© fixer et les deux
angles limites s'il s'agit de l'arc de cercle.

\begin{BDef}
\Lcs{pstSphereCircle}\OptArgs\Largb{radius}\\
\Lcs{pstSphereArc}\OptArgs\Largb{radius}\Largb{angle\_min}\Largb{angle\_max}
\end{BDef}

\verb+\pstSphereArc+ : respectez l'ordre des angles limites sinon l'interprÃ©teur
\textsf{PostScript} signalera une erreur.

\begin{center}
\begin{pspicture}(-5,-4)(5,5)
  \decor
  \psset{Xorigine=40}%
  \multido{\iYorigine=-65+10}{14}{\psset{Yorigine=\iYorigine,Zorigine=15}
    \pstSphereCircle[linecolor=red]{5}}
  \multido{\iYorigine=-65+10}{14}{\psset{Yorigine=\iYorigine,Zorigine=50}%
    \pstSphereArc[linecolor=blue,linewidth=0.5mm,fillstyle=solid,fillcolor=OrangePale]{5}{180}{360}}
\end{pspicture}
\end{center}

Des cercles et des arcs de cercle sur le plan de front :
\begin{lstlisting}
\psset{Xorigine=40}
\multido{\iYorigine=-65+10}{14}{%
  \psset{Yorigine=\iYorigine,Zorigine=15}\pstSphereCircle[linecolor=red]{5}}
\multido{\iYorigine=-65+10}{14}{\psset{Yorigine=\iYorigine,Zorigine=50}
  \pstSphereArc[linecolor=blue,linewidth=0.5mm,fillstyle=solid,fillcolor=OrangePale]{5}{180}{360}}
\end{lstlisting}

\clearpage
\subsection{La sphÃ©re}
Elle est dÃ©finie par son rayon, son centre se place avec les
paramÃ©tres \Lkeyword{CX}, \Lkeyword{CY}, \Lkeyword{CZ}, on la fait tourner autour de son
centre avec \Lkeyword{RotX}, \Lkeyword{RotY}, \Lkeyword{RotZ}.

\begin{center}
\begin{pspicture}(-5,-4)(5,5)
\decor% defined in the preamble
\multido{\iCY=-65+10,\iRotX=0+20}{7}{%
\psset{CY=\iCY,CZ=-5,CX=15,RotX=\iRotX}
\psset{fillstyle=gradient,gradbegin=white,gradend=red,%
       gradmidpoint=0.2,linecolor=magenta,linewidth=0.05mm}
\ifnum\multidocount=7
\psset{CZ=0}
\fi
\ifnum\multidocount=3
\psset{CZ=20}
\fi
\pstMirrorSphere{5}}
\multido{\iCY=65+-10,\iRotX=0+15}{7}{%
\psset{CY=\iCY,CZ=-5,CX=15,RotX=\iRotX}
\psset{fillstyle=gradient,gradbegin=white,gradend=red,%
       gradmidpoint=0.2,linecolor=magenta,linewidth=0.05mm}
\ifnum\multidocount=6
\psset{CZ=10}
\fi
\ifnum\multidocount=3
\psset{CZ=20,CY=5}
\fi
\pstMirrorSphere{5}}
\end{pspicture}
\end{center}
\begin{lstlisting}
\multido{\iCY=-65+10,\iRotX=0+20}{7}{%
  \psset{CY=\iCY,CZ=-5,CX=15,RotX=\iRotX,fillstyle=gradient,gradbegin=white,gradend=red,%
       gradmidpoint=0.2,linecolor=magenta,linewidth=0.05mm}\pstMirrorSphere{5}}
\end{lstlisting}

\clearpage
\subsection{Dessiner un cylindre}
Le cylindre sera donnÃ© par le rayon de sa base et sa hauteur. Le
centre de la base sera positionnÃ© avec \Lkeyword{CX}, \Lkeyword{CY}, \Lkeyword{CZ}, on le fait tourner autour
autour des axes avec \Lkeyword{RotX}, \Lkeyword{RotY}, \Lkeyword{RotZ}.

\begin{BDef}
\Lcs{pstSphereCylinder}\OptArgs\Largb{radius}\Largb{hauteur}
\end{BDef}

\begin{center}
\begin{pspicture}(-5,-4)(5,5)
  \decor
%  \pstSphereText[fillstyle=solid,fillcolor=red,fontscale=10,fontname=Helvetica,normale=0 90](15,0,-10){l'aventure mathÃ©matique}
  \psset{fillstyle=gradient,gradbegin=white,gradend=red,gradmidpoint=0.2,linewidth=0.1mm}
  { \psset{CX=20,CY=20,CZ=-10} \pstSphereCylinder{5}{7.5} }
  { \psset{CX=15,CY=10,CZ=-7.5,RotY=90,RotX=-45} \pstSphereCylinder{2.5}{-10}}
%  \pstSphereText[fillstyle=solid,fillcolor=red,fontscale=25,fontname=Bookman-Demi,
%    normale=0 0](40,0,10){Tangente}
\end{pspicture}
\end{center}

\begin{lstlisting}
\psset{fillstyle=gradient,gradbegin=white,gradend=red,%
       gradmidpoint=0.2,linewidth=0.1mm}
{\psset{CX=20,CY=20,CZ=-10}
\pstSphereCylinder{5}{7.5}}
{\psset{CX=15,CY=10,CZ=-7.5,RotY=90,RotX=-45}
\pstSphereCylinder{2.5}{-10}}
\end{lstlisting}

\clearpage
\subsection{Dessiner un cÃ©ne}
Le cÃ©ne se dÃ©finit comme le cylindre, rayon de la base, hauteur et
en option la fraction de hauteur de cÃ©ne si l'on souhaite avoir un
tronc de cÃ©ne.

\begin{BDef}
\Lcs{pstSphereCone}\OptArgs\Largb{radius}\Largb{hauteur}
\end{BDef}


\Lkeyword{fracHcone} est obligatoirement un nombre compris entre 0 et 1.

\begin{center}
\begin{pspicture}(-5,-4)(5,5)
\decor
\psset{linecolor=red,fillstyle=gradient,gradbegin=yellow,gradend=red,gradmidpoint=0,linewidth=0.05mm}
{\psset{CX=15,CZ=-10,CY=5,fracHcone=0.5}\pstSphereCone{5}{10}}
{\psset{CX=40,CZ=5,CY=-25,RotY=-90}     \pstSphereCone{5}{10}}
{\psset{CX=25,CZ=5,CY=-70,RotX=-90}     \pstSphereCone{5}{30}}
\end{pspicture}
\end{center}

\begin{lstlisting}
{\psset{CX=15,CZ=-10,CY=5,fracHcone=0.5}\pstSphereCone{5}{10}}
{\psset{CX=40,CZ=5,CY=-25,RotY=-90}     \pstSphereCone{5}{10}}
{\psset{CX=25,CZ=5,CY=-70,RotX=-90}     \pstSphereCone{5}{30}}
\end{lstlisting}

\clearpage
\subsection{Tracer une pyramide}
La pyramide Ã© base carrÃ©e est donnÃ©e par le demi-cÃ©tÃ© (\Lkeyword{A})de sa
  base et sa hauteur (\Lkeyword{Hpyramide}), que l'on peut faire tourner et placer oÃ© on
  veut, comme les objets prÃ©cÃ©dents.

\begin{center}
\begin{pspicture}(-5,-4)(5,5)
\decor
\psset{fillstyle=solid,linecolor=black,A=5}
\multido{\nY=-65+20.0}{7}{%
\psset{RotX=0,RotZ=0,RotY=-90,CX=40,CZ=5,CY=\nY,Hpyramide=5}
\pstSpherePyramide}
\multido{\nY=65+-20.0,\iRotZ=0+20}{6}{%
\psset{RotX=0,RotZ=\iRotZ,RotY=0,CX=20,CZ=-10,CY=\nY,Hpyramide=8}
\pstSpherePyramide}
\end{pspicture}
\end{center}

\begin{lstlisting}
\psset{fillstyle=solid,linecolor=black,A=5}
\multido{\nY=-65+20.0}{4}{%
  \psset{RotX=0,RotZ=0,RotY=-90,CX=40,CZ=5,CY=\nY,Hpyramide=5}\pstSpherePyramide}
\multido{\nY=65+-20.0,\iRotZ=0+20}{6}{%
  \psset{RotX=0,RotZ=\iRotZ,RotY=0,CX=20,CZ=-10,CY=\nY,Hpyramide=8}\pstSpherePyramide}
\end{lstlisting}

\section{Image d'un texte}

C'est la commande \Lcs{pstSphereText}\OptArgs\Largs{x,y,z}\Largb{texte} qui permet d'afficher le texte 
souhaitÃ© avec les paramÃ©tres suivants :
\begin{compactitem}
  \item Le plan qui contient le texte est dÃ©fini par :
  \begin{compactitem}
    \item sa normale \Lkeyword{normale}=$\theta$ $\phi$ ;
    \item et son origine \texttt{(x,y,z)}.
  \end{compactitem}
  \item La taille des caractÃ©res est fixÃ©e par \Lkeyword{fontscale}=1 : 1 cm par dÃ©faut.
  \item Le type de fonte par \Lkeyset{fontname=Times-Roman} par dÃ©faut.
  \item Le boolÃ©en \Lkeyword{isolatin} qui est positionnÃ© Ã© \texttt{true} par dÃ©faut, permet l'Ã©criture 
    des caractÃ©res accentuÃ©s. Si l'on souhaite utiliser la police \texttt{Symbol}, permettant d'Ã©crire 
    les caractÃ©res grecs, il faut positionner ce boolÃ©en Ã© \texttt{false}.
\end{compactitem}
\begin{center}
\begin{pspicture}(-8,-10)(8,10)
%\psset{Rayon=8}
\newpsstyle{GradWhiteYellow}{fillstyle=gradient,%
    gradbegin=yellow,gradend=yellow!20,linecolor=yellow!50,GradientCircle=true,gradmidpoint=0,GradientPos={(1,1)}}%
\pscircle[style=GradWhiteYellow]{7.07}
\pstSphereGrid[linecolor=red,grille=10,Ymin=-50,Ymax=50,Xmax=80,Xmin=-80,normale=0 0](20,0,0)
\pstSphereGrid[linecolor=blue,grille=10,Ymin=-40,Ymax=-20,Xmax=80,Xmin=-80,normale=0 90](40,0,-10)%
\pstSphereText[fillstyle=solid,fillcolor=red,normale=0 0,fontscale=30,fontname=Bookman-Demi,yO=0](20,0,10){Tangente}
\pstSphereText[fillstyle=solid,fillcolor=blue,normale=0 90,fontscale=10,
  fontname=Helvetica,yO=2.5](10,0,-10){l'aventure math\'ematique}%
\end{pspicture}
\end{center}

\begin{lstlisting}
\begin{pspicture}(-8,-10)(8,10)
%\psset{Rayon=8}
\newpsstyle{GradWhiteYellow}{fillstyle=gradient,%
    gradbegin=yellow,gradend=yellow!20,linecolor=yellow!50,GradientCircle=true,gradmidpoint=0,GradientPos={(1,1)}}%
\pscircle[style=GradWhiteYellow]{7.07}
\pstSphereGrid[linecolor=red,grille=10,Ymin=-50,Ymax=50,Xmax=80,Xmin=-80,normale=0 0](20,0,0)
\pstSphereGrid[linecolor=blue,grille=10,Ymin=-40,Ymax=-20,Xmax=80,Xmin=-80,normale=0 90](40,0,-10)%
\pstSphereText[fillstyle=solid,fillcolor=red,normale=0 0,fontscale=30,
  fontname=Bookman-Demi,yO=0](20,0,10){Tangente}
\pstSphereText[fillstyle=solid,fillcolor=red,normale=0 0,fontscale=30,PSfont=Bookman-Demi,yO=0](20,0,10){Tangente}
\pstSphereText[fillstyle=solid,fillcolor=blue,normale=0 90,fontscale=10,
  fontname=Helvetica,yO=2.5](10,0,-10){l'aventure math\'ematique}%
\end{pspicture}
\end{lstlisting}


\subsection{Les images}

L'image doit \^{e}tre au format eps et ell doit \^{e}tre &lt;&lt;~\textit{normalis\'{e}e}~&gt;&gt; pour que le calcul 
de son image dans le miroir puisse s'effectuer. La proc\'{e}dure de calcul est identique \`{a} celle 
utilis\'{e}e dans le package \textsf{pst-anamorphosis}. Cette image doit \^{e}tre dans 
un plan d\'{e}fini comme pour le texte.

%\verb+\psBowlImage[options](x,y,z){fichier.eps}+

\begin{BDef}
\Lcs{pstSphereImage}\OptArgs\Largr{$x,y,z$}\Largb{filename.eps}\\
\Lcs{parametricplotSphere}\OptArgs\Largb{$x_0$}\Largb{$x_1$}\OptArg{PS code}\Largb{function}
\end{BDef}



\begin{center}
\begin{pspicture}(-7,-7)(7,7)
{\psset{normale=0 0,Xorigine=15,Yorigine=0,Zorigine=0}
\pstSphereFrame[fillstyle=solid,fillcolor=black](-70,-50)(70,50)
\pstSphereGrid[linecolor=white,linewidth=0.2mm,grille=10,Ymin=-50,Ymax=50,Xmax=70,Xmin=-70](15,0,0)}%
\pstSphereImage[normale=0 0,scale=0.75](15,0,0){images/tiger-c.eps}
\pstSphereText[fillstyle=solid,fillcolor=white,linecolor=white,fontscale=17,fontname=Symbol,
               normale=0 0,isolatin=false](15,0,25){tiger-b}
\parametricplotSphere[plotpoints=3600,linecolor=white,linewidth=0.5mm,normale=0 0,Xorigine=15,%
                Yorigine=30,Zorigine=10]{0}{360}{%
  /Radius 10 t 4 mul cos mul def 
   Radius t cos mul 1 add Radius t sin mul }
\parametricplotSphere[plotpoints=3600,fillstyle=solid,fillcolor=green!50,linecolor=white,
                Xorigine=15,Yorigine=-30,Zorigine=10]{0}{360}{%
   /Radius 10 t 2 mul sin t 6 mul sin 4 div add mul def
   Radius t cos mul Radius t sin mul }
\parametricplotSphere[plotpoints=3600,linecolor=white,linewidth=0.1,
                Xorigine=15,Yorigine=0,Zorigine=-10,algebraic]{-70}{70}{
   t|10*sin(t/4) }
\end{pspicture}
\end{center}

\begin{lstlisting}
\begin{pspicture}(-7,-7)(7,7)
{\psset{normale=0 0,Xorigine=15,Yorigine=0,Zorigine=0}
\pstSphereFrame[fillstyle=solid,fillcolor=black](-70,-50)(70,50)
\pstSphereGrid[linecolor=white,linewidth=0.2mm,grille=10,Ymin=-50,Ymax=50,Xmax=70,Xmin=-70](15,0,0)}%
\pstSphereImage[normale=0 0,scale=0.75](15,0,0){images/donaldNB.eps}
\pstSphereText[fillstyle=solid,fillcolor=white,linecolor=white,fontscale=17,fontname=Symbol,
               normale=0 0,isolatin=false](15,0,25){tiger.eps}
\parametricplotSphere[plotpoints=3600,linecolor=white,linewidth=0.5mm,normale=0 0,Xorigine=15,%
                Yorigine=30,Zorigine=10]{0}{360}{%
  /Radius 10 t 4 mul cos mul def 
   Radius t cos mul 1 add Radius t sin mul }
\parametricplotSphere[plotpoints=3600,fillstyle=solid,fillcolor=green!50,linecolor=white,
                Xorigine=15,Yorigine=-30,Zorigine=10]{0}{360}{%
   /Radius 10 t 2 mul sin t 6 mul sin 4 div add mul def
   Radius t cos mul Radius t sin mul }
\parametricplotSphere[plotpoints=3600,linecolor=white,linewidth=0.1,
                Xorigine=15,Yorigine=0,Zorigine=-10,algebraic]{-70}{70}{
   t|10*sin(t/4) }
\end{pspicture}
\end{lstlisting}

\section{Une remarque importante}

Si le calcul des faces cach\'{e}es est pris en compte pour chaque objet pris individuellement, il en 
est pas de m\^{e}me pour l'ensemble du panorama. Il convient donc de placer en premier les objets 
les plus \'{e}loign\'{e}s de boule, puis ceux qui sont de plus en plus proche de la boule.


\begin{pspicture}(-4,-4)(4,4)
\psframe*[linecolor=black!15](-4,-4)(4,4)
\pscircle*[linecolor=blue!50]{!5 2 sqrt div}
\psset{Rayon=5}
\pstSphereImage[normale=0 0](5,0,0){images/tiger-c.eps}
%\pstSphereGrid[linecolor=gray,linewidth=0.01,grille=5,Ymin=-100,Ymax=100,Xmax=100,Xmin=-100](5,0,0)%
\end{pspicture}

\begin{lstlisting}
\begin{pspicture}(-5,-5)(5,5)
\psframe*(-5,-5)(5,5)
\pscircle*[linecolor=blue!50]{!5 2 sqrt div}
\psset{Rayon=5}
\pstSphereImage[normale=0 0](5,0,0){images/tiger-c.eps}
%\pstSphereGrid[linecolor=gray,linewidth=0.01,grille=5,Ymin=-100,Ymax=100,Xmax=100,Xmin=-100](5,0,0)%
\end{pspicture}
\end{lstlisting}

\section{Conclusion}
Nous pouvons maintenant nous atteler Ã© la tÃ©che de construire des
dÃ©cors en 3D vus dans une boule qui soient intÃ©ressants et
artistiques, un prolongement vers une animation est toujours possible.
J'ai pensÃ© inclure dans ce package, Ã© l'aide d'une option,
la 3D conventionnelle : il suffit de changer les formules
relatives Ã© la boule et d'y rajouter les paramÃ©tres relatifs au
point de vue, mais finalement cela aurait trop alourdi cette
Ã©tude -- vous pouvez regardez la commande \Lcs{pnodeTroisD} et les
nombreuses applications dÃ©veloppÃ©es dans ma page personnelle.

\textbf{Une remarque importante :} si le calcul des faces cachÃ©es
est pris en compte pour chaque objet pris individuellement, il en
est pas de mÃ©me pour l'ensemble du panorama. Il convient donc de
placer en premier les objets les plus Ã©loignÃ©s de boule, puis ceux
qui sont de plus en plus proche de la boule.


\section{List of all optional arguments for \texttt{pst-mirror}}

\xkvview{family=pst-mirror,columns={key,type,default}}

\nocite{*}

\bgroup
\raggedright
\printbibliography
\egroup

\printindex


\end{document}
</pre></body></html>