summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Master/texmf-dist/doc/generic/pst-mirror/Changes12
-rw-r--r--Master/texmf-dist/doc/generic/pst-mirror/README12
-rw-r--r--Master/texmf-dist/doc/generic/pst-mirror/pst-mirror-doc.bib118
-rw-r--r--Master/texmf-dist/doc/generic/pst-mirror/pst-mirror-doc.pdfbin0 -> 6332400 bytes
-rw-r--r--Master/texmf-dist/doc/generic/pst-mirror/pst-mirror-doc.tex1041
-rw-r--r--Master/texmf-dist/dvips/pst-mirror/pst-mirror.pro1081
-rw-r--r--Master/texmf-dist/source/generic/pst-mirror/Makefile69
-rw-r--r--Master/texmf-dist/tex/generic/pst-mirror/pst-mirror.tex1304
-rw-r--r--Master/texmf-dist/tex/latex/pst-mirror/pst-mirror.sty12
-rwxr-xr-xMaster/tlpkg/bin/tlpkg-ctan-check3
-rwxr-xr-xMaster/tlpkg/libexec/ctan2tds1
-rw-r--r--Master/tlpkg/tlpsrc/collection-pstricks.tlpsrc1
-rw-r--r--Master/tlpkg/tlpsrc/pst-mirror.tlpsrc0
13 files changed, 3653 insertions, 1 deletions
diff --git a/Master/texmf-dist/doc/generic/pst-mirror/Changes b/Master/texmf-dist/doc/generic/pst-mirror/Changes
new file mode 100644
index 00000000000..ce6d1726287
--- /dev/null
+++ b/Master/texmf-dist/doc/generic/pst-mirror/Changes
@@ -0,0 +1,12 @@
+..... pst-mirror.tex
+1.00 2009-12-08 initial version
+
+..... pst-mirror.pro
+1.00 2009-12-08 initial version
+
+..... pst-mirror.sty
+ 2009-12-08 first version
+
+..... pst-mirror-doc.tex
+2009-12-08 initial version
+
diff --git a/Master/texmf-dist/doc/generic/pst-mirror/README b/Master/texmf-dist/doc/generic/pst-mirror/README
new file mode 100644
index 00000000000..a67daf938de
--- /dev/null
+++ b/Master/texmf-dist/doc/generic/pst-mirror/README
@@ -0,0 +1,12 @@
+pst-mirror: 3d objects on a spherical mirror
+
+Save the files pst-mirror.sty|tex|pro in a directory, which is part of your
+local TeX tree. The pro file should go into $TEXMF/dvips/pstricks/
+Then do not forget to run texhash to update this tree.
+For more information see the documentation of your LATEX distribution
+on installing packages into your local TeX system or read the
+TeX Frequently Asked Questions:
+(http://www.tex.ac.uk/cgi-bin/texfaq2html?label=instpackages).
+
+PSTricks is PostScript Tricks, the documentation cannot be run
+with pdftex, use the sequence latex->dvips->ps2pdf. \ No newline at end of file
diff --git a/Master/texmf-dist/doc/generic/pst-mirror/pst-mirror-doc.bib b/Master/texmf-dist/doc/generic/pst-mirror/pst-mirror-doc.bib
new file mode 100644
index 00000000000..953dcdda342
--- /dev/null
+++ b/Master/texmf-dist/doc/generic/pst-mirror/pst-mirror-doc.bib
@@ -0,0 +1,118 @@
+@STRING{dtk = {{D}ie {\TeX}nische {K}om{\"o}die} }
+
+@Book{PostScript,
+ Author = {Kollock, Nikolai G.},
+ Title = {PostScript richtig eingesetzt: vom Konzept zum
+ praktischen Einsatz},
+ Publisher = {IWT},
+ Address = {Vaterstetten},
+ year = 1989,
+}
+
+@Manual{pstricks,
+ Title = {PSTricks - {\PS} macros for Generic TeX},
+ Author = {Timothy Van Zandt},
+ Organization = {},
+ Address = {\url{http://www.tug.org/application/PSTricks}},
+ Note = {},
+ year = 1993,
+}
+
+
+@Manual{pdftricks,
+ Title = {PSTricks Support for pdf},
+ Author = {Herbert Voss},
+ Organization = {},
+ Address = {\url{http://PSTricks.de/pdf/pdfoutput.phtml}},
+ Note = {},
+ year = 2002,
+}
+
+@Manual{miwi,
+ Title = {References for \TeX{} and Friends},
+ Author = {Michael Wiedmann and Peter Karp},
+ Organization = {},
+ Address = {\url{http://www.miwie.org/tex-refs/}},
+ Note = {},
+ year = 2003,
+}
+
+
+@Manual{vue3d:2002,
+ Title = {Vue en 3D},
+ Author = {Manuel Luque},
+ Organization = {},
+ Address = {\url{http://members.aol.com/Mluque5130/vue3d16112002.zip}},
+ Note = {},
+ year = 2002,
+}
+
+@Article{dtk02.2:jackson.voss:plot-funktionen,
+ author = {Laura E. Jackson and Herbert Vo{\ss}},
+ title = {Die {P}lot-{F}unktionen von {\texttt{pst-plot}}},
+ journal = dtk,
+ year = 2002,
+ volume = {2/02},
+ altvolume = 2,
+ altnumber = 14,
+ month = jun,
+ pages = {27--34},
+ annote = bretter,
+ keywords = {},
+ abstract = { Im letzten Heft wurden die mathematischen Funktionen von
+ \PS~im Zusammenhang mit dem {\LaTeX}-Paket
+ \texttt{pst-plot} zum Zeichnen von Funktionen beschrieben
+ und durch Beispiele erl{\"a}utert. In diesem Teil werden
+ die bislang nur erw{\"a}hnten Plot-Funktionen f{\"u}r
+ externe Daten behandelt. }
+}
+
+@Article{dtk02.1:voss:mathematischen,
+ author = {Herbert Vo{\ss}},
+ title = {Die mathematischen {F}unktionen von {P}ostscript},
+ journal = dtk,
+ year = 2002,
+ volume = {1/02},
+ altvolume = 1,
+ altnumber = 14,
+ month = mar,
+ pages = {40-47},
+ annote = bretter,
+ keywords = {},
+ abstract = { \PS, faktisch genauso alt wie {\TeX}, ist im
+ Verh{\"a}ltnis dazu allgemein noch weniger bekannt, wenn es
+ darum geht zu beurteilen, was es denn nun im eigentlichen
+ Sinne ist. Au{\ss}erdem wird h{\"a}ufig vergessen, dass
+ sich mit den \PS-Funktionen viele Dinge erledigen lassen,
+ bei denen sonst auf externe Programme zur{\"u}ckgegriffen
+ wird. Dies wird im Folgenden f{\"u}r die mathematischen
+ Funktionen im Zusammenhang mit dem Paket \texttt{pst-plot}
+ gezeigt. }
+}
+
+@Book{companion,
+ author = {Michel Goosens and Frank Mittelbach and Sebastian Rahtz and Denis Roegel and Herbert Vo{\ss}},
+ title = {The {\LaTeX} {G}raphics {C}ompanion},
+ publisher = {{Addison-Wesley Publishing Company}},
+ edition = second,
+ year = {2007},
+ address = {Reading, Mass.}
+}
+
+@Book{PSTricks2,
+ author = {Herbert Vo\ss},
+ title = {\texttt{PSTricks} -- {G}rafik f\"ur \TeX{} und \LaTeX},
+ edition = {5.},
+ publisher = {DANTE -- Lehmanns},
+ year = {2008},
+ address = {Heidelberg/Hamburg}
+}
+
+@Book{LaTeXRef,
+ author = {Herbert Vo\ss},
+ title = {\LaTeX\ Referenz},
+ edition = {1.},
+ publisher = {DANTE -- Lehmanns},
+ year = {2007},
+ address = {Heidelberg/Hamburg}
+}
diff --git a/Master/texmf-dist/doc/generic/pst-mirror/pst-mirror-doc.pdf b/Master/texmf-dist/doc/generic/pst-mirror/pst-mirror-doc.pdf
new file mode 100644
index 00000000000..ee38b847202
--- /dev/null
+++ b/Master/texmf-dist/doc/generic/pst-mirror/pst-mirror-doc.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/generic/pst-mirror/pst-mirror-doc.tex b/Master/texmf-dist/doc/generic/pst-mirror/pst-mirror-doc.tex
new file mode 100644
index 00000000000..b850baa76c7
--- /dev/null
+++ b/Master/texmf-dist/doc/generic/pst-mirror/pst-mirror-doc.tex
@@ -0,0 +1,1041 @@
+%% $Id: pst-mirror-doc.tex 168 2009-12-08 17:55:07Z herbert $
+\documentclass[11pt,frenchb,BCOR10mm,DIV12,bibliography=totoc,parskip=false,smallheadings
+ headexclude,footexclude,oneside]{pst-doc}
+\usepackage[utf8]{inputenc}
+\usepackage{pst-mirror}
+\let\myFV\fileversion
+\usepackage{pst-grad}
+\usepackage{tabularx}
+\usepackage{longtable}
+
+\def\UrlFont{\small\ttfamily}
+\makeatletter
+\def\verbatim@font{\small\normalfont\ttfamily}
+\makeatother
+\let\myPart\part
+\renewcommand{\part}[1]{\clearpage\myPart{#1}}
+\newcommand\verbI[1]{\small\texttt{#1}}
+
+\psset{subgriddiv=0,gridlabels=7pt,gridcolor=black!15}
+\hypersetup{pdfauthor={Herbert Voss},pdftitle={Sphere mirror}}
+%
+\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.7}{\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)%
+ \pstTextSphere[fillstyle=solid,fillcolor=red,normale=0 0,fontscale=40,PSfont=Time-Roman,yO=0](20,0,10){pst-mirror}
+ \pstTextSphere[fillstyle=solid,fillcolor=black,normale=0 0,fontscale=20,PSfont=Helvetica,yO=0](20,0,35){PSTricks}
+ \pstTextSphere[fillstyle=solid,fillcolor=blue,normale=0 90,fontscale=10,PSfont=Helvetica,yO=2.5](10,0,-10){A Spherical Mirror}%
+\end{pspicture}}}
+
+\lstset{basicstyle=\ttfamily\footnotesize}
+
+\begin{document}
+\author{Manuel Luque\\Herbert Vo\ss}
+\docauthor{}
+\date{\today}
+\title{Images on a spherical mirror}
+\subtitle{A PSTricks package for drawing 3D objects on a sphere, v\myFV}
+\maketitle%
+
+\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é à la sortie
+d'un garage ou à 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&=&\mathrm{\widehat{I_2OA}+\widehat{OAI_2}}\\
+&=&\mathrm{\widehat{I_2OI_1}+\widehat{I_1OA}+\widehat{OAI_1}+\widehat{I_1AI_2}}\\
+&=&\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&=&\pi-(\mathrm{\widehat{I_2OA'}+\widehat{OA'I_2})}\\
+&=&\pi-\left(\mathrm{(\widehat{I_2OI_1}+\widehat{I_1OA'})+(\widehat{OAI'_1}-\widehat{I_1A'I_2})}\right)\\
+&=&\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 à 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}\pstCube}
+ \multido{\iZ=-15+10}{2}{\psset{CX=\iX,CZ=\iZ,CY=45}\pstCube}
+ \multido{\iZ=55+-10}{6}{\psset{CX=\iX,CZ=\iZ,CY=-45}\pstCube}
+ \multido{\iZ=-15+10}{2}{\psset{CX=\iX,CZ=\iZ,CY=-45}\pstCube}
+ \multido{\iY=35+-10}{4}{\psset{CX=\iX,CZ=55,CY=\iY}\pstCube}
+ \multido{\iY=-35+10}{4}{\psset{CX=\iX,CZ=55,CY=\iY}\pstCube}}}
+\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}\pstCube}
+\multido{\iZ=-15+10}{2}{%
+ \psset{fillstyle=solid,fillstyle=solid,fillcolor=GrisClair,A=5,B=A,C=A,CX=15,CY=45,CZ=\iZ}\pstCube
+ \psset{CY=-45}\pstCube}
+\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}\pstCube}
+\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}\pstCube}
+\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}\pstPyramide}
+\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}
+\pstPyramide}
+{\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}
+\pstDie}
+\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}\pstCube}
+ \multido{\iZ=-15+10}{2}{\psset{CX=\iX,CZ=\iZ,CY=45}\pstCube}
+ \multido{\iZ=55+-10}{6}{\psset{CX=\iX,CZ=\iZ,CY=-45}\pstCube}
+ \multido{\iZ=-15+10}{2}{\psset{CX=\iX,CZ=\iZ,CY=-45}\pstCube}
+ \multido{\iY=35+-10}{4}{\psset{CX=\iX,CZ=55,CY=\iY}\pstCube}
+ \multido{\iY=-35+10}{4}{\psset{CX=\iX,CZ=55,CY=\iY}\pstCube}}}
+\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}\pstCube}
+\multido{\iZ=-15+10}{2}{%
+ \psset{fillstyle=solid,fillstyle=solid,fillcolor=GrisClair,A=5,B=A,C=A,CX=15,CY=45,CZ=\iZ}\pstCube
+ \psset{CY=-45}\pstCube}
+\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}\pstCube}
+\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}\pstCube}
+\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}\pstPyramide}
+\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}
+\pstPyramide}
+{\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}
+\pstDie}
+\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}\pstCube}
+{\psset{linecolor=red,CX=15,A=5,B=A,C=A,CY=-10,CZ=-5,RotZ=0,fillstyle=solid,fillcolor=blue}\pstDie}%
+\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}\pstCube}
+\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}\pstCube}
+{\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}\pstDie}%
+{\psset{CZ=-10,CY=-2.5,CX=2.5,RotZ=-20,linecolor=black,fillstyle=gradient,Rtetraedre=2.5}\pstTetraedre}
+\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}\pstCube}}
+\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}\pstPyramide}
+\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}\pstCube}
+{\psset{linecolor=red,CX=15,A=5,B=A,C=A,CY=-10,CZ=-5,RotZ=0,fillstyle=solid,fillcolor=blue}\pstDie}%
+\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}\pstCube}
+\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}\pstCube}
+{\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}\pstDie}%
+{\psset{CZ=-10,CY=-2.5,CX=2.5,RotZ=-20,linecolor=black,fillstyle=gradient,Rtetraedre=2.5}\pstTetraedre}
+\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}\pstCube}}
+\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}\pstPyramide}
+\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>0$.
+\begin{center}
+\begin{pspicture}(-2,-2)(10,5)
+\pscircle{2}
+\rput(2,0){%
+\psline{->}(5,0)
+\psline{->}(0,5)
+\psline{->}(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}
+\psSpherePolygon[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}
+\Cube
+\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}
+\pstCube
+\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}
+\pstCube
+\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{pstDie}, qui en interne utilise celle
+du \Lcs{pstCube} 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}
+\pstDie
+\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}
+\pstDie
+\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}
+\pstDie
+\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}
+\pstDie
+\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
+% \pstTextSphere[fillstyle=solid,fillcolor=red,fontscale=10,PSfont=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}}
+% \pstTextSphere[fillstyle=solid,fillcolor=red,fontscale=25,PSfont=Bookman-demibold,
+% 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}
+\pstPyramide}
+\multido{\nY=65+-20.0,\iRotZ=0+20}{6}{%
+\psset{RotX=0,RotZ=\iRotZ,RotY=0,CX=20,CZ=-10,CY=\nY,Hpyramide=8}
+\pstPyramide}
+\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}\pstPyramide}
+\multido{\nY=65+-20.0,\iRotZ=0+20}{6}{%
+ \psset{RotX=0,RotZ=\iRotZ,RotY=0,CX=20,CZ=-10,CY=\nY,Hpyramide=8}\pstPyramide}
+\end{lstlisting}
+
+\section{Image d'un texte}
+
+C'est la commande \Lcs{pstTextSphere}\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{PSfont=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)%
+\pstTextSphere[fillstyle=solid,fillcolor=red,normale=0 0,fontscale=30,PSfont=Bookman-demibold,yO=0](20,0,10){Tangente}
+\pstTextSphere[fillstyle=solid,fillcolor=blue,normale=0 90,fontscale=10,
+ PSfont=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)%
+\pstTextSphere[fillstyle=solid,fillcolor=red,normale=0 0,fontscale=30,
+ PSfont=Bookman-demibold,yO=0](20,0,10){Tangente}
+\pstTextSphere[fillstyle=solid,fillcolor=blue,normale=0 90,fontscale=10,
+ PSfont=Helvetica,yO=2.5](10,0,-10){l'aventure math\'ematique}%
+\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}}
+
+
+\bgroup
+\nocite{*}
+\raggedright
+\bibliographystyle{plain}
+\bibliography{\jobname}
+\egroup
+
+\printindex
+
+
+\end{document}
diff --git a/Master/texmf-dist/dvips/pst-mirror/pst-mirror.pro b/Master/texmf-dist/dvips/pst-mirror/pst-mirror.pro
new file mode 100644
index 00000000000..ec382555756
--- /dev/null
+++ b/Master/texmf-dist/dvips/pst-mirror/pst-mirror.pro
@@ -0,0 +1,1081 @@
+%% $Id: pst-mirror.pro 169 2009-12-08 17:55:59Z herbert $
+%%
+%% This is file `pst-mirror.pro',
+%%
+%% IMPORTANT NOTICE:
+%%
+%% PostScript prologue for pst-mirror.tex
+%%
+%% Manuel Luque
+%% Herbert Voss
+%%
+%% This program can be redistributed and/or modified under the terms
+%% of the LaTeX Project Public License Distributed from CTAN archives
+%% in directory CTAN:/macros/latex/base/lppl.txt.
+%%
+%% DESCRIPTION:
+%% `pst-mirror' is a PSTricks package to view objects ob a spherical sphere
+%%
+%% version 1.0 2009-09-12
+%
+/tx@Sphere3DDict 100 dict def
+tx@Sphere3DDict begin
+%% macros de
+%% Jean-Paul Vignault
+%% dans pst-solides3d
+%%%%% ### defpoint ###
+%% syntaxe : xA yA /A defpoint
+/defpoint {
+1 dict begin
+ /t@mp@r@ire exch def
+ [ 3 1 roll ] cvx t@mp@r@ire exch
+end def
+} def
+
+%%%%% ### vecteur ###
+%% syntaxe~: A B vecteur
+/vecteur {
+ %% xA yA xB yB
+ 3 -1 roll %% xA xB yB yA
+ sub %% xA xB yB-yA
+ 3 1 roll %% yB-yA xA xB
+ exch sub %% yB-yA xB-xA
+ exch
+} def
+
+%%%%% ### mulv ###
+%% syntaxe : u a mulv --> au
+/mulv { %% xA, yA, a
+ dup %% xA, yA, a, a
+ 3 1 roll %% xA, a, yA, a
+ mul 3 1 roll %% ayA, xA, a
+ mul exch
+} def
+
+%%%%% ### addv ###
+%% syntaxe : u v addv --> u+v
+/addv { %% xA yA xB yB
+ 3 1 roll %% xA yB yA xB
+ 4 1 roll %% xB xA yB yA
+ add 3 1 roll %% yB+yA xB xA
+ add exch
+} def
+
+%% syntaxe : n currentpathsegmenteline --> ajoute n-1 points sur chaque
+%% segment droit sur le chemin courant
+/currentpathsegmenteline {
+6 dict begin
+ /n exch def
+% /warp {2 copy ptojpoint point} def
+ %% pour remplacer 'move'
+ /warpmove{
+ 2 index {
+ newpath
+ } if
+ moveto
+ pop false
+ } def
+%
+ %% pour remplacer 'lineto'
+ /warpline {
+ currentpoint /A defpoint
+ /B defpoint
+ A B vecteur /u defpoint
+ 1 1 n {
+ /i exch def
+ A u i n div mulv addv
+%% la ligne ci-dessous est a decommenter pour verifier que ca marche
+% 2 copy ptojpoint point
+ lineto
+ } for
+ } bind def
+%
+ true
+ { warpmove } { warpline } { curveto } { closepath } pathforall
+ pop
+end
+} def
+%% fin des macros de JPV
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+/Cube{%
+ /XA M11 A mul M12 B mul add M13 C mul add CX add def
+ /YA M21 A mul M22 B mul add M23 C mul add CY add def
+ /ZA M31 A mul M32 B mul add M33 C mul add CZ add def
+ /XB M11 A mul neg M12 B mul add M13 C mul add CX add def
+ /YB M21 A mul neg M22 B mul add M23 C mul add CY add def
+ /ZB M31 A mul neg M32 B mul add M33 C mul add CZ add def
+ /XC M11 A mul neg M12 B mul neg add M13 C mul add CX add def
+ /YC M21 A mul neg M22 B mul neg add M23 C mul add CY add def
+ /ZC M31 A mul neg M32 B mul neg add M33 C mul add CZ add def
+ /XD M11 A mul M12 B mul neg add M13 C mul add CX add def
+ /YD M21 A mul M22 B mul neg add M23 C mul add CY add def
+ /ZD M31 A mul M32 B mul neg add M33 C mul add CZ add def
+ /XE M11 A mul M12 B mul add M13 C mul sub CX add def
+ /YE M21 A mul M22 B mul add M23 C mul sub CY add def
+ /ZE M31 A mul M32 B mul add M33 C mul sub CZ add def
+ /XF M11 A mul neg M12 B mul add M13 C mul sub CX add def
+ /YF M21 A mul neg M22 B mul add M23 C mul sub CY add def
+ /ZF M31 A mul neg M32 B mul add M33 C mul sub CZ add def
+ /XG M11 A mul neg M12 B mul sub M13 C mul sub CX add def
+ /YG M21 A mul neg M22 B mul sub M23 C mul sub CY add def
+ /ZG M31 A mul neg M32 B mul sub M33 C mul sub CZ add def
+ /XH M11 A mul M12 B mul sub M13 C mul sub CX add def
+ /YH M21 A mul M22 B mul sub M23 C mul sub CY add def
+ /ZH M31 A mul M32 B mul sub M33 C mul sub CZ add def
+% Centres des faces : condition de visibilité
+% FACE 1
+% OC1
+ /XC1 M13 C mul CX add def
+ /YC1 M23 C mul CY add def
+ /ZC1 M33 C mul CZ add def
+% Normale à la face 1
+ /NX1 M13 C mul def
+ /NY1 M23 C mul def
+ /NZ1 M33 C mul def
+% produit scalaire
+% ? /PS1 XC1 NX1 mul YC1 NY1 mul add ZC1 Rayon add NZ1 mul add def
+ /PS1 XC1 NX1 mul YC1 NY1 mul add ZC1 NZ1 mul add def
+% FACE 2
+% OC2
+ /XC2 M11 A mul CX add def
+ /YC2 M21 A mul CY add def
+ /ZC2 M31 A mul CZ add def
+% normale à la face 2
+ /NX2 M11 A mul def
+ /NY2 M21 A mul def
+ /NZ2 M31 A mul def
+% produit scalaire
+% ? /PS2 XC2 NX2 mul YC2 NY2 mul add ZC2 Rayon add NZ2 mul add def
+ /PS2 XC2 NX2 mul YC2 NY2 mul add ZC2 NZ2 mul add def
+% FACE 3
+% OC3
+ /XC3 M13 C neg mul CX add def
+ /YC3 M23 C neg mul CY add def
+ /ZC3 M33 C neg mul CZ add def
+% normale à la face 3
+ /NX3 M13 C neg mul def
+ /NY3 M23 C neg mul def
+ /NZ3 M33 C neg mul def
+% produit scalaire
+% ? /PS3 XC3 NX3 mul YC3 NY3 mul add ZC3 Rayon add NZ3 mul add def
+ /PS3 XC3 NX3 mul YC3 NY3 mul add ZC3 NZ3 mul add def
+% FACE 4
+% OC4
+ /XC4 M11 A neg mul CX add def
+ /YC4 M21 A neg mul CY add def
+ /ZC4 M31 A neg mul CZ add def
+% normale à la face 4
+ /NX4 M11 A neg mul def
+ /NY4 M21 A neg mul def
+ /NZ4 M31 A neg mul def
+% produit scalaire
+% ? /PS4 XC4 NX4 mul YC4 NY4 mul add ZC4 Rayon add NZ4 mul add def
+ /PS4 XC4 NX4 mul YC4 NY4 mul add ZC4 NZ4 mul add def
+% FACE 5
+% OC5
+ /XC5 M12 B neg mul CX add def
+ /YC5 M22 B neg mul CY add def
+ /ZC5 M32 B neg mul CZ add def
+% normale à la face 5
+ /NX5 M12 B neg mul def
+ /NY5 M22 B neg mul def
+ /NZ5 M32 B neg mul def
+% produit scalaire
+% /PS5 XC5 NX5 mul YC5 NY5 mul add ZC5 Rayon add NZ5 mul add def
+ /PS5 XC5 NX5 mul YC5 NY5 mul add ZC5 NZ5 mul add def
+% FACE 6
+% OC6
+ /XC6 M12 B mul CX add def
+ /YC6 M22 B mul CY add def
+ /ZC6 M32 B mul CZ add def
+% normale à la face 6
+ /NX6 M12 B mul def
+ /NY6 M22 B mul def
+ /NZ6 M32 B mul def
+% produit scalaire
+% /PS6 XC6 NX6 mul YC6 NY6 mul add ZC6 Rayon add NZ6 mul add def
+ /PS6 XC6 NX6 mul YC6 NY6 mul add ZC6 NZ6 mul add def
+% faceOne
+PS1 0 le { %
+reduction reduction scale
+1 setlinejoin
+ /Yordonnee YA def
+ /Zcote ZA def
+ /Xabscisse XA def
+ CalcCoordinates
+ moveto
+0 0.01 1 { % k
+ /K exch def
+ /Zcote K ZB mul 1 K sub ZA mul add def
+ /Xabscisse K XB mul 1 K sub XA mul add def
+ /Yordonnee K YB mul 1 K sub YA mul add def
+ CalcCoordinates
+ lineto
+ } for
+0 0.01 1 { % k
+ /K exch def
+ /Zcote K ZC mul 1 K sub ZB mul add def
+ /Xabscisse K XC mul 1 K sub XB mul add def
+ /Yordonnee K YC mul 1 K sub YB mul add def
+ CalcCoordinates
+ lineto
+ } for
+0 0.01 1 { % k
+ /K exch def
+ /Zcote K ZD mul 1 K sub ZC mul add def
+ /Xabscisse K XD mul 1 K sub XC mul add def
+ /Yordonnee K YD mul 1 K sub YC mul add def
+ CalcCoordinates
+ lineto
+ } for
+0 0.01 1 { % k
+ /K exch def
+ /Zcote K ZA mul 1 K sub ZD mul add def
+ /Xabscisse K XA mul 1 K sub XD mul add def
+ /Yordonnee K YA mul 1 K sub YD mul add def
+ CalcCoordinates
+ lineto
+ } for
+} if
+% faceTwo
+PS2 0 le { %
+reduction reduction scale
+1 setlinejoin
+ /Xabscisse XA def
+ /Yordonnee YA def
+ /Zcote ZA def
+ CalcCoordinates
+ moveto
+0 0.01 1 { % k
+ /K exch def
+ /Zcote K ZD mul 1 K sub ZA mul add def
+ /Xabscisse K XD mul 1 K sub XA mul add def
+ /Yordonnee K YD mul 1 K sub YA mul add def
+ CalcCoordinates
+ lineto
+ } for
+0 0.01 1 { % k
+ /K exch def
+ /Zcote K ZH mul 1 K sub ZD mul add def
+ /Xabscisse K XH mul 1 K sub XD mul add def
+ /Yordonnee K YH mul 1 K sub YD mul add def
+ CalcCoordinates
+ lineto
+ } for
+0 0.01 1 { % k
+ /K exch def
+ /Zcote K ZE mul 1 K sub ZH mul add def
+ /Xabscisse K XE mul 1 K sub XH mul add def
+ /Yordonnee K YE mul 1 K sub YH mul add def
+ CalcCoordinates
+ lineto
+ } for
+0 0.01 1 { % k
+ /K exch def
+ /Zcote K ZA mul 1 K sub ZE mul add def
+ /Xabscisse K XA mul 1 K sub XE mul add def
+ /Yordonnee K YA mul 1 K sub YE mul add def
+ CalcCoordinates
+ lineto
+ } for
+} if
+% face three
+PS3 0 le { %
+reduction reduction scale
+1 setlinejoin
+ /Xabscisse XE def
+ /Yordonnee YE def
+ /Zcote ZE def
+ CalcCoordinates
+ moveto
+0 0.01 1 { % k
+ /K exch def
+ /Zcote K ZF mul 1 K sub ZE mul add def
+ /Xabscisse K XF mul 1 K sub XE mul add def
+ /Yordonnee K YF mul 1 K sub YE mul add def
+ CalcCoordinates
+ lineto
+ } for
+0 0.01 1 { % k
+ /K exch def
+ /Zcote K ZG mul 1 K sub ZF mul add def
+ /Xabscisse K XG mul 1 K sub XF mul add def
+ /Yordonnee K YG mul 1 K sub YF mul add def
+ CalcCoordinates
+ lineto
+ } for
+0 0.01 1 { % k
+ /K exch def
+ /Zcote K ZH mul 1 K sub ZG mul add def
+ /Xabscisse K XH mul 1 K sub XG mul add def
+ /Yordonnee K YH mul 1 K sub YG mul add def
+ CalcCoordinates
+ lineto
+ } for
+0 0.01 1 { % k
+ /K exch def
+ /Zcote K ZE mul 1 K sub ZH mul add def
+ /Xabscisse K XE mul 1 K sub XH mul add def
+ /Yordonnee K YE mul 1 K sub YH mul add def
+ CalcCoordinates
+ lineto
+ } for
+} if
+% face four
+PS4 0 le { %
+reduction reduction scale
+1 setlinejoin
+ /Xabscisse XB def
+ /Yordonnee YB def
+ /Zcote ZB def
+ CalcCoordinates
+ moveto
+0 0.01 1 { % k
+ /K exch def
+ /Zcote K ZF mul 1 K sub ZB mul add def
+ /Xabscisse K XF mul 1 K sub XB mul add def
+ /Yordonnee K YF mul 1 K sub YB mul add def
+ CalcCoordinates
+ lineto
+ } for
+0 0.01 1 { % k
+ /K exch def
+ /Zcote K ZG mul 1 K sub ZF mul add def
+ /Xabscisse K XG mul 1 K sub XF mul add def
+ /Yordonnee K YG mul 1 K sub YF mul add def
+ CalcCoordinates
+ lineto
+ } for
+0 0.01 1 { % k
+ /K exch def
+ /Zcote K ZC mul 1 K sub ZG mul add def
+ /Xabscisse K XC mul 1 K sub XG mul add def
+ /Yordonnee K YC mul 1 K sub YG mul add def
+ CalcCoordinates
+ lineto
+ } for
+0 0.01 1 { % k
+ /K exch def
+ /Zcote K ZB mul 1 K sub ZC mul add def
+ /Xabscisse K XB mul 1 K sub XC mul add def
+ /Yordonnee K YB mul 1 K sub YC mul add def
+ CalcCoordinates
+ lineto
+ } for
+} if
+% face five
+PS5 0 le { %
+reduction reduction scale
+1 setlinejoin
+ /Xabscisse XC def
+ /Yordonnee YC def
+ /Zcote ZC def
+ CalcCoordinates
+ moveto
+0 0.01 1 { % k
+ /K exch def
+ /Zcote K ZD mul 1 K sub ZC mul add def
+ /Xabscisse K XD mul 1 K sub XC mul add def
+ /Yordonnee K YD mul 1 K sub YC mul add def
+ CalcCoordinates
+ lineto
+ } for
+0 0.01 1 { % k
+ /K exch def
+ /Zcote K ZH mul 1 K sub ZD mul add def
+ /Xabscisse K XH mul 1 K sub XD mul add def
+ /Yordonnee K YH mul 1 K sub YD mul add def
+ CalcCoordinates
+ lineto
+ } for
+0 0.01 1 { % k
+ /K exch def
+ /Zcote K ZG mul 1 K sub ZH mul add def
+ /Xabscisse K XG mul 1 K sub XH mul add def
+ /Yordonnee K YG mul 1 K sub YH mul add def
+ CalcCoordinates
+ lineto
+ } for
+0 0.01 1 { % k
+ /K exch def
+ /Zcote K ZC mul 1 K sub ZG mul add def
+ /Xabscisse K XC mul 1 K sub XG mul add def
+ /Yordonnee K YC mul 1 K sub YG mul add def
+ CalcCoordinates
+ lineto
+ } for
+} if
+% face six
+PS6 0 le { %
+reduction reduction scale
+1 setlinejoin
+ /Xabscisse XB def
+ /Yordonnee YB def
+ /Zcote ZB def
+ CalcCoordinates
+ moveto
+0 0.01 1 { % k
+ /K exch def
+ /Zcote K ZA mul 1 K sub ZB mul add def
+ /Xabscisse K XA mul 1 K sub XB mul add def
+ /Yordonnee K YA mul 1 K sub YB mul add def
+ CalcCoordinates
+ lineto
+ } for
+0 0.01 1 { % k
+ /K exch def
+ /Zcote K ZE mul 1 K sub ZA mul add def
+ /Xabscisse K XE mul 1 K sub XA mul add def
+ /Yordonnee K YE mul 1 K sub YA mul add def
+ CalcCoordinates
+ lineto
+ } for
+0 0.01 1 { % k
+ /K exch def
+ /Zcote K ZF mul 1 K sub ZE mul add def
+ /Xabscisse K XF mul 1 K sub XE mul add def
+ /Yordonnee K YF mul 1 K sub YE mul add def
+ CalcCoordinates
+ lineto
+ } for
+0 0.01 1 { % k
+ /K exch def
+ /Zcote K ZB mul 1 K sub ZF mul add def
+ /Xabscisse K XB mul 1 K sub XF mul add def
+ /Yordonnee K YB mul 1 K sub YF mul add def
+ CalcCoordinates
+ lineto
+ } for
+} if
+ }
+def
+%
+/PointsDie{%
+PS6 0 le { %
+reduction reduction scale
+A 2 div neg A A 2 div {
+ /XCpoint exch def
+C 2 div neg C C 2 div {
+ /ZCpoint exch def
+newpath
+ /Zpoint Rpoint ZCpoint add def
+ /Xpoint XCpoint def
+ /Ypoint B def
+CalculsPointsAfterTransformations
+CalcCoordinates
+ moveto
+0 1 359 {%
+ /Angle exch def
+ /Zpoint Rpoint Angle cos mul ZCpoint add def
+ /Xpoint Rpoint Angle sin mul XCpoint add def
+CalculsPointsAfterTransformations
+CalcCoordinates
+ lineto
+ } for
+closepath
+0 setgray
+fill
+ } for
+ } for
+ } if
+PS5 0 le { %
+reduction reduction scale
+newpath
+ /Ypoint B neg def
+ /XCpoint A 2 div neg def
+ /ZCpoint C 2 div def
+ /Xpoint Rpoint XCpoint add def
+ /Zpoint ZCpoint def
+CalculsPointsAfterTransformations
+CalcCoordinates
+ moveto
+0 1 359 {%
+ /Angle exch def
+ /Xpoint Rpoint Angle cos mul XCpoint add def
+ /Zpoint Rpoint Angle sin mul ZCpoint add def
+CalculsPointsAfterTransformations
+CalcCoordinates
+ lineto
+ } for
+closepath
+0 setgray
+fill
+%
+newpath
+ /XCpoint A 2 div def
+ /ZCpoint C 2 div neg def
+ /Xpoint Rpoint XCpoint add def
+ /Zpoint ZCpoint def
+CalculsPointsAfterTransformations
+CalcCoordinates
+ moveto
+0 1 359 {%
+ /Angle exch def
+ /Xpoint Rpoint Angle cos mul XCpoint add def
+ /Zpoint Rpoint Angle sin mul ZCpoint add def
+CalculsPointsAfterTransformations
+CalcCoordinates
+ lineto
+ } for
+closepath
+0 setgray
+fill
+%
+newpath
+ /XCpoint 0 def
+ /ZCpoint 0 def
+ /Xpoint Rpoint XCpoint add def
+ /Zpoint ZCpoint def
+CalculsPointsAfterTransformations
+CalcCoordinates
+ moveto
+0 1 359 {%
+ /Angle exch def
+ /Xpoint Rpoint Angle cos mul XCpoint add def
+ /Zpoint Rpoint Angle sin mul ZCpoint add def
+CalculsPointsAfterTransformations
+CalcCoordinates
+ lineto
+ } for
+closepath
+0 setgray
+fill
+} if
+PS4 0 le { %
+reduction reduction scale
+C 2 div neg C C 2 div {
+ /ZCpoint exch def
+B 2 div neg B B 2 div {
+ /YCpoint exch def
+newpath
+ /Zpoint Rpoint ZCpoint add def
+ /Ypoint YCpoint def
+ /Xpoint A neg def
+CalculsPointsAfterTransformations
+CalcCoordinates
+ moveto
+0 1 359 {%
+ /Angle exch def
+ /Zpoint Rpoint Angle cos mul ZCpoint add def
+ /Ypoint Rpoint Angle sin mul YCpoint add def
+CalculsPointsAfterTransformations
+CalcCoordinates
+ lineto
+ } for
+closepath
+0 setgray
+fill
+ } for
+ } for
+% le point du milieu
+newpath
+ /Zpoint Rpoint def
+ /Ypoint 0 def
+CalculsPointsAfterTransformations
+CalcCoordinates
+ moveto
+0 1 359 {%
+ /Angle exch def
+ /Zpoint Rpoint Angle cos mul def
+ /Ypoint Rpoint Angle sin mul def
+CalculsPointsAfterTransformations
+CalcCoordinates
+ lineto
+ } for
+closepath
+0 setgray
+fill
+} if
+PS3 0 le { %
+reduction reduction scale
+A 2 div neg A A 2 div {
+ /XCpoint exch def
+B 2 div neg B 2 div B 2 div {
+ /YCpoint exch def
+newpath
+ /Xpoint Rpoint XCpoint add def
+ /Ypoint YCpoint def
+ /Zpoint C neg def
+CalculsPointsAfterTransformations
+CalcCoordinates
+ moveto
+0 1 359 {%
+ /Angle exch def
+ /Xpoint Rpoint Angle cos mul XCpoint add def
+ /Ypoint Rpoint Angle sin mul YCpoint add def
+CalculsPointsAfterTransformations
+CalcCoordinates
+ lineto
+ } for
+closepath
+0 setgray
+fill
+ } for
+ } for
+} if
+PS2 0 le { %
+reduction reduction scale
+newpath
+ /Xpoint A def
+ /Ypoint Rpoint B 2 div add def
+ /Zpoint C 2 div neg def
+CalculsPointsAfterTransformations
+CalcCoordinates
+ moveto
+0 1 359 {%
+ /Angle exch def
+ /Ypoint Rpoint Angle cos mul B 2 div add def
+ /Zpoint Rpoint Angle sin mul C 2 div sub def
+CalculsPointsAfterTransformations
+CalcCoordinates
+ lineto
+ } for
+closepath
+0 setgray
+fill
+newpath
+ /Xpoint A def
+ /Ypoint Rpoint B 2 div sub def
+ /Zpoint C 2 div def
+CalculsPointsAfterTransformations
+CalcCoordinates
+ moveto
+0 1 359 {%
+ /Angle exch def
+ /Xpoint A def
+ /Ypoint Rpoint Angle cos mul B 2 div sub def
+ /Zpoint Rpoint Angle sin mul A 2 div add def
+CalculsPointsAfterTransformations
+CalcCoordinates
+ lineto
+ } for
+closepath
+0 setgray
+fill
+} if
+PS1 0 le { %
+reduction reduction scale
+newpath
+ /Xpoint Rpoint def
+ /Ypoint 0 def
+ /Zpoint C def
+CalculsPointsAfterTransformations
+CalcCoordinates
+ moveto
+0 1 359 {%
+ /Angle exch def
+ /Xpoint Rpoint Angle cos mul def
+ /Ypoint Rpoint Angle sin mul def
+CalculsPointsAfterTransformations
+CalcCoordinates
+ lineto
+ } for
+closepath
+0 setgray
+fill
+} if
+} def
+/SommetsTetraedre{%
+ /xA RayonBaseTetraedre neg def
+ /yA 0 def
+ /zA 0 def
+ /xB 0.5 RayonBaseTetraedre mul def
+ /yB RayonBaseTetraedre 0.866 mul neg def
+ /zB 0 def
+ /xC xB def
+ /yC yB neg def
+ /zC 0 def
+ /xD 0 def
+ /yD 0 def
+ /zD RayonBaseTetraedre 1.414 mul def
+% coordonnées centre des faces
+ /xFaceA xA xB xC add add 3 div def
+ /yFaceA yA yB yC add add 3 div def
+ /zFaceA zA zB zC add add 3 div def
+ /xFaceB xD xA xB add add 3 div def
+ /yFaceB yD yA yB add add 3 div def
+ /zFaceB zD zA zB add add 3 div def
+ /xFaceC xA xD xC add add 3 div def
+ /yFaceC yA yD yC add add 3 div def
+ /zFaceC zA zD zC add add 3 div def
+ /xFaceD xD xB xC add add 3 div def
+ /yFaceD yD yB yC add add 3 div def
+ /zFaceD zD zB zC add add 3 div def
+% sommets après rotation et translation
+ /XA M11 xA mul M12 yA mul add M13 zA mul add CX add def
+ /YA M21 xA mul M22 yA mul add M23 zA mul add CY add def
+ /ZA M31 xA mul M32 yA mul add M33 zA mul add CZ add def
+ /XB M11 xB mul M12 yB mul add M13 zB mul add CX add def
+ /YB M21 xB mul M22 yB mul add M23 zB mul add CY add def
+ /ZB M31 xB mul M32 yB mul add M33 zB mul add CZ add def
+ /XC M11 xC mul M12 yC mul add M13 zC mul add CX add def
+ /YC M21 xC mul M22 yC mul add M23 zC mul add CY add def
+ /ZC M31 xC mul M32 yC mul add M33 zC mul add CZ add def
+ /XD M11 xD mul M12 yD mul add M13 zD mul add CX add def
+ /YD M21 xD mul M22 yD mul add M23 zD mul add CY add def
+ /ZD M31 xD mul M32 yD mul add M33 zD mul add CZ add def
+% centres de faces après transformations
+ /XFaceA M11 xFaceA mul M12 yFaceA mul add M13 zFaceA mul add CX add def
+ /YFaceA M21 xFaceA mul M22 yFaceA mul add M23 zFaceA mul add CY add def
+ /ZFaceA M31 xFaceA mul M32 yFaceA mul add M33 zFaceA mul add CZ add def
+ /XFaceB M11 xFaceB mul M12 yFaceB mul add M13 zFaceB mul add CX add def
+ /YFaceB M21 xFaceB mul M22 yFaceB mul add M23 zFaceB mul add CY add def
+ /ZFaceB M31 xFaceB mul M32 yFaceB mul add M33 zFaceB mul add CZ add def
+ /XFaceC M11 xFaceC mul M12 yFaceC mul add M13 zFaceC mul add CX add def
+ /YFaceC M21 xFaceC mul M22 yFaceC mul add M23 zFaceC mul add CY add def
+ /ZFaceC M31 xFaceC mul M32 yFaceC mul add M33 zFaceC mul add CZ add def
+ /XFaceD M11 xFaceD mul M12 yFaceD mul add M13 zFaceD mul add CX add def
+ /YFaceD M21 xFaceD mul M22 yFaceD mul add M23 zFaceD mul add CY add def
+ /ZFaceD M31 xFaceD mul M32 yFaceD mul add M33 zFaceD mul add CZ add def
+% Normales aux faces
+ /NxA XFaceA XD sub def
+ /NyA YFaceA YD sub def
+ /NzA ZFaceA ZD sub def
+ /NxB XFaceB XC sub def
+ /NyB YFaceB YC sub def
+ /NzB ZFaceB ZC sub def
+ /NxC XFaceC XB sub def
+ /NyC YFaceC YB sub def
+ /NzC ZFaceC ZB sub def
+ /NxD XFaceD XA sub def
+ /NyD YFaceD YA sub def
+ /NzD ZFaceD ZA sub def
+% Conditions de visibilité
+ /PSA XFaceA NxA mul YFaceA NyA mul add ZFaceA NzA mul add def
+ /PSB XFaceB NxB mul YFaceB NyB mul add ZFaceB NzB mul add def
+ /PSC XFaceC NxC mul YFaceC NyC mul add ZFaceC NzC mul add def
+ /PSD XFaceD NxD mul YFaceD NyD mul add ZFaceD NzD mul add def
+ }
+ def
+/Tetraedre{%
+SommetsTetraedre
+% face ABC
+ PSA 0 le { %
+reduction reduction scale
+1 setlinejoin
+ /Xabscisse XA def
+ /Yordonnee YA def
+ /Zcote ZA def
+ CalcCoordinates
+ moveto
+0 0.01 1 { % k
+ /K exch def
+ /Zcote K ZB mul 1 K sub ZA mul add def
+ /Xabscisse K XB mul 1 K sub XA mul add def
+ /Yordonnee K YB mul 1 K sub YA mul add def
+ CalcCoordinates
+ lineto
+ } for
+0 0.01 1 { % k
+ /K exch def
+ /Zcote K ZC mul 1 K sub ZB mul add def
+ /Xabscisse K XC mul 1 K sub XB mul add def
+ /Yordonnee K YC mul 1 K sub YB mul add def
+ CalcCoordinates
+ lineto
+ } for
+0 0.01 1 { % k
+ /K exch def
+ /Zcote K ZA mul 1 K sub ZC mul add def
+ /Xabscisse K XA mul 1 K sub XC mul add def
+ /Yordonnee K YA mul 1 K sub YC mul add def
+ CalcCoordinates
+ lineto
+ } for
+} if
+% face DAB
+ PSB 0 le { %
+reduction reduction scale
+1 setlinejoin
+ /Xabscisse XD def
+ /Yordonnee YD def
+ /Zcote ZD def
+ CalcCoordinates
+ moveto
+0 0.01 1 { % k
+ /K exch def
+ /Zcote K ZA mul 1 K sub ZD mul add def
+ /Xabscisse K XA mul 1 K sub XD mul add def
+ /Yordonnee K YA mul 1 K sub YD mul add def
+ CalcCoordinates
+ lineto
+ } for
+0 0.01 1 { % k
+ /K exch def
+ /Zcote K ZB mul 1 K sub ZA mul add def
+ /Xabscisse K XB mul 1 K sub XA mul add def
+ /Yordonnee K YB mul 1 K sub YA mul add def
+ CalcCoordinates
+ lineto
+ } for
+0 0.01 1 { % k
+ /K exch def
+ /Zcote K ZD mul 1 K sub ZB mul add def
+ /Xabscisse K XD mul 1 K sub XB mul add def
+ /Yordonnee K YD mul 1 K sub YB mul add def
+ CalcCoordinates
+ lineto
+ } for
+} if
+% face DAC
+PSC 0 le { %
+reduction reduction scale
+1 setlinejoin
+ /Xabscisse XD def
+ /Yordonnee YD def
+ /Zcote ZD def
+ CalcCoordinates
+ moveto
+0 0.01 1 { % k
+ /K exch def
+ /Zcote K ZA mul 1 K sub ZD mul add def
+ /Xabscisse K XA mul 1 K sub XD mul add def
+ /Yordonnee K YA mul 1 K sub YD mul add def
+ CalcCoordinates
+ lineto
+ } for
+0 0.01 1 { % k
+ /K exch def
+ /Zcote K ZC mul 1 K sub ZA mul add def
+ /Xabscisse K XC mul 1 K sub XA mul add def
+ /Yordonnee K YC mul 1 K sub YA mul add def
+ CalcCoordinates
+ lineto
+ } for
+0 0.01 1 { % k
+ /K exch def
+ /Zcote K ZD mul 1 K sub ZC mul add def
+ /Xabscisse K XD mul 1 K sub XC mul add def
+ /Yordonnee K YD mul 1 K sub YC mul add def
+ CalcCoordinates
+ lineto
+ } for
+} if
+% face DBC
+ PSD 0 le { %
+reduction reduction scale
+1 setlinejoin
+ /Xabscisse XD def
+ /Yordonnee YD def
+ /Zcote ZD def
+ CalcCoordinates
+ moveto
+0 0.01 1 { % k
+ /K exch def
+ /Zcote K ZB mul 1 K sub ZD mul add def
+ /Xabscisse K XB mul 1 K sub XD mul add def
+ /Yordonnee K YB mul 1 K sub YD mul add def
+ CalcCoordinates
+ lineto
+ } for
+0 0.01 1 { % k
+ /K exch def
+ /Zcote K ZC mul 1 K sub ZB mul add def
+ /Xabscisse K XC mul 1 K sub XB mul add def
+ /Yordonnee K YC mul 1 K sub YB mul add def
+ CalcCoordinates
+ lineto
+ } for
+0 0.01 1 { % k
+ /K exch def
+ /Zcote K ZD mul 1 K sub ZC mul add def
+ /Xabscisse K XD mul 1 K sub XC mul add def
+ /Yordonnee K YD mul 1 K sub YC mul add def
+ CalcCoordinates
+ lineto
+ } for
+} if
+}
+def
+% 2 aout 2002
+/SommetsPyramide{%
+ /xA A def
+ /yA A neg def
+ /zA 0 def
+ /xB A def
+ /yB A def
+ /zB 0 def
+ /xC A neg def
+ /yC A def
+ /zC 0 def
+ /xD A neg def
+ /yD A neg def
+ /zD 0 def
+ /xS 0 def
+ /yS 0 def
+ /zS Hpyramide def
+% coordonnées centre des faces
+ /Alpha A Hpyramide atan def
+ /xFaceSAB Hpyramide Alpha dup sin exch cos mul mul def
+ /yFaceSAB 0 def
+ /zFaceSAB Hpyramide Alpha sin dup mul mul def
+ /xFaceSBC 0 def
+ /yFaceSBC xFaceSAB def
+ /zFaceSBC zFaceSAB def
+ /xFaceSCD xFaceSAB neg def
+ /yFaceSCD 0 def
+ /zFaceSCD zFaceSAB def
+ /xFaceSDA 0 def
+ /yFaceSDA xFaceSAB neg def
+ /zFaceSDA zFaceSAB def
+% sommets après rotation et translation
+ /XA M11 xA mul M12 yA mul add M13 zA mul add CX add def
+ /YA M21 xA mul M22 yA mul add M23 zA mul add CY add def
+ /ZA M31 xA mul M32 yA mul add M33 zA mul add CZ add def
+ /XB M11 xB mul M12 yB mul add M13 zB mul add CX add def
+ /YB M21 xB mul M22 yB mul add M23 zB mul add CY add def
+ /ZB M31 xB mul M32 yB mul add M33 zB mul add CZ add def
+ /XC M11 xC mul M12 yC mul add M13 zC mul add CX add def
+ /YC M21 xC mul M22 yC mul add M23 zC mul add CY add def
+ /ZC M31 xC mul M32 yC mul add M33 zC mul add CZ add def
+ /XD M11 xD mul M12 yD mul add M13 zD mul add CX add def
+ /YD M21 xD mul M22 yD mul add M23 zD mul add CY add def
+ /ZD M31 xD mul M32 yD mul add M33 zD mul add CZ add def
+ /XS M11 xS mul M12 yS mul add M13 zS mul add CX add def
+ /YS M21 xS mul M22 yS mul add M23 zS mul add CY add def
+ /ZS M31 xS mul M32 yS mul add M33 zS mul add CZ add def
+% centres de faces après transformations
+ /XFaceSAB M11 xFaceSAB mul M12 yFaceSAB mul add M13 zFaceSAB mul add CX add def
+ /YFaceSAB M21 xFaceSAB mul M22 yFaceSAB mul add M23 zFaceSAB mul add CY add def
+ /ZFaceSAB M31 xFaceSAB mul M32 yFaceSAB mul add M33 zFaceSAB mul add CZ add def
+ /XFaceSBC M11 xFaceSBC mul M12 yFaceSBC mul add M13 zFaceSBC mul add CX add def
+ /YFaceSBC M21 xFaceSBC mul M22 yFaceSBC mul add M23 zFaceSBC mul add CY add def
+ /ZFaceSBC M31 xFaceSBC mul M32 yFaceSBC mul add M33 zFaceSBC mul add CZ add def
+ /XFaceSCD M11 xFaceSCD mul M12 yFaceSCD mul add M13 zFaceSCD mul add CX add def
+ /YFaceSCD M21 xFaceSCD mul M22 yFaceSCD mul add M23 zFaceSCD mul add CY add def
+ /ZFaceSCD M31 xFaceSCD mul M32 yFaceSCD mul add M33 zFaceSCD mul add CZ add def
+ /XFaceSDA M11 xFaceSDA mul M12 yFaceSDA mul add M13 zFaceSDA mul add CX add def
+ /YFaceSDA M21 xFaceSDA mul M22 yFaceSDA mul add M23 zFaceSDA mul add CY add def
+ /ZFaceSDA M31 xFaceSDA mul M32 yFaceSDA mul add M33 zFaceSDA mul add CZ add def
+% Normales aux faces
+ /NxSAB XFaceSAB CX sub def
+ /NySAB YFaceSAB CY sub def
+ /NzSAB ZFaceSAB CZ sub def
+ /NxSBC XFaceSBC CX sub def
+ /NySBC YFaceSBC CY sub def
+ /NzSBC ZFaceSBC CZ sub def
+ /NxSCD XFaceSCD CX sub def
+ /NySCD YFaceSCD CY sub def
+ /NzSCD ZFaceSCD CZ sub def
+ /NxSDA XFaceSDA CX sub def
+ /NySDA YFaceSDA CY sub def
+ /NzSDA ZFaceSDA CZ sub def
+ /NxABCD CX XS sub def
+ /NyABCD CY YS sub def
+ /NzABCD CZ ZS sub def
+% Conditions de visibilité
+ /PSAB XFaceSAB NxSAB mul YFaceSAB NySAB mul add ZFaceSAB NzSAB mul add def
+ /PSBC XFaceSBC NxSBC mul YFaceSBC NySBC mul add ZFaceSBC NzSBC mul add def
+ /PSCD XFaceSCD NxSCD mul YFaceSCD NySCD mul add ZFaceSCD NzSCD mul add def
+ /PSDA XFaceSDA NxSDA mul YFaceSDA NySDA mul add ZFaceSDA NzSDA mul add def
+ /PSABCD CX NxABCD mul CY NyABCD mul add CZ NzABCD mul add def
+ }
+ def
+%
+/FormulesSphere { %
+ /RHO Zcote dup mul Yordonnee dup mul add sqrt def
+ /incidence RHO Xabscisse Atan 2 div def
+ /RHO' incidence sin Rayon mul def
+ RHO 0 eq {/Xi 0 def /Yi 0 def}
+ {/Yi RHO' RHO div Zcote mul def
+ /Xi RHO' RHO div Yordonnee mul neg def }
+ ifelse }
+ def
+%
+/CalcCoordinates{%
+ FormulesSphere
+ Xi 28.45 mul Yi 28.45 mul
+ }
+ def
+% pour la 3D conventionnelle
+/formulesTroisD{%
+ /xObservateur Xabscisse Sin1 mul neg Yordonnee Cos1 mul add def
+ /yObservateur Xabscisse Cos1Sin2 mul neg Yordonnee Sin1Sin2 mul sub Xabscisse Cos2 mul add def
+ /zObservateur Xabscisse neg Cos1Cos2 mul Yordonnee Sin1Cos2 mul sub Xabscisse Sin2 mul sub Dobs add def
+ /xScreen DScreen xObservateur mul zObservateur div def
+ /yScreen DScreen yObservateur mul zObservateur div def
+ xScreen 28.45 mul yScreen 28.45 mul}
+def
+%
+/CalculsPointsAfterTransformations{%
+ /Xabscisse M11 Xpoint mul M12 Ypoint mul add M13 Zpoint mul add CX add def
+ /Yordonnee M21 Xpoint mul M22 Ypoint mul add M23 Zpoint mul add CY add def
+ /Zcote M31 Xpoint mul M32 Ypoint mul add M33 Zpoint mul add CZ add def
+ }
+def
+%
+%
+/tx@WARP{
+%% D'après un fichier original de
+%%(c) P. Kleiweg 1997
+%% adapté par :
+%% Manuel Luque
+%% Arnaud Schmittbuhl
+%% Jean-Paul Vignault
+%% les commentaires sont de Jean-Paul Vignault
+/warpmove{
+ %% on teste le booleen place 2 tokens plus en avant sur la pile
+ %% si c'est 'true', alors on en est au 1er appel => on initialise
+ %% le chemin
+ 2 index { newpath } if
+ %% puis on applique warp a notre point
+ warp moveto
+ %% on enleve le 'true' pour mettre un 'false' a la place
+ pop false
+} bind def
+%% pour remplacer 'lineto
+/warpline { warp lineto } bind def
+%% pour remplacer 'curveto'
+/warpcurve {
+ 6 2 roll warp
+ 6 2 roll warp
+ 6 2 roll warp
+ curveto
+} bind def
+%% 'warpit' declenche la transformation du chemin courant
+/warpit { true { warpmove } { warpline } { warpcurve } { closepath } pathforall pop } bind def
+} def
+
+/tx@PathForAll{
+/warp {
+ 5 dict begin
+ /Ypoint exch def
+ /Xpoint exch def
+ 2dto3d
+ /Zpoint exch def
+ /Ypoint exch def
+ /Xpoint exch def
+ CalculsPointsApresTransformations
+ 3dto2d
+ end
+} bind def
+tx@WARP
+warpit
+} def
+
+/tx@TransformPlan{ % le calcul des coefficients
+%% pour passer des coordonnées du plan aux coordonnées
+%% (x,y,z) du repère absolu
+%% les coordonnées sphériques du vecteur normal
+%% au plan
+%% l'origine du plan
+/zO' exch def
+/yO' exch def
+/xO' exch def
+%% les coefficients de la matrice de transformation
+/C11 {K_theta sin neg} def
+/C12 {K_theta cos K_phi sin mul neg} bind def
+/C21 {K_theta cos} bind def
+/C22 {K_phi sin K_theta sin mul neg } bind def
+/C31 {K_phi cos} bind def
+/2dto3d {
+%% coordonnées dans le repère absolu
+3 dict begin
+ C11 Xpoint mul C12 Ypoint mul add xO' add % x
+ C21 Xpoint mul C22 Ypoint mul add yO' add % y
+ C31 Ypoint mul zO' add
+end } def
+} def
+%
+end
diff --git a/Master/texmf-dist/source/generic/pst-mirror/Makefile b/Master/texmf-dist/source/generic/pst-mirror/Makefile
new file mode 100644
index 00000000000..3a503a2d091
--- /dev/null
+++ b/Master/texmf-dist/source/generic/pst-mirror/Makefile
@@ -0,0 +1,69 @@
+
+# `Makefile' for `pst-mirror.pdf', hv, 2009/12/08
+
+.SUFFIXES : .tex .ltx .dvi .ps .pdf .eps
+
+PACKAGE = pst-mirror
+
+MAIN = $(PACKAGE)-doc
+
+TDS = ~/PSTricks/PSTricks-TDS
+
+LATEX = latex
+
+ARCHNAME = $(MAIN)-$(shell date +%y%m%d)
+
+ARCHFILES = $(PACKAGE).sty $(PACKAGE).tex $(PACKAGE).pro $(MAIN).tex README Changes Makefile
+
+all : doc clean
+doc: $(MAIN).pdf
+
+$(MAIN).pdf : $(MAIN).ps
+ GS_OPTIONS=-dAutoRotatePages=/None ps2pdf $<
+
+$(MAIN).ps : $(MAIN).dvi
+ dvips $<
+
+$(MAIN).dvi : $(MAIN).tex
+ $(LATEX) $<
+ $(LATEX) $<
+ if ! test -f $(basename $<).glo ; then touch $(basename $<).glo; fi
+ if ! test -f $(basename $<).idx ; then touch $(basename $<).idx; fi
+ makeindex -t $(basename $<).ilg -s pst-doc.ist -o $(basename $<).ind $(basename $<).idx
+ makeindex -s gglo.ist -t $(basename $<).glg -o $(basename $<).gls \
+ $(basename $<).glo
+ bibtex $(basename $<)
+ $(LATEX) $<
+ $(LATEX) $<
+
+clean :
+ $(RM) $(addprefix $(MAIN), .log .aux .glg .glo .gls .ilg .idx .ind .tmp .toc .out .blg .bbl )
+ $(RM) $(addprefix $(MAIN), .dvi .ps .xcp)
+
+veryclean : clean
+ $(RM) $(addprefix $(MAIN), .pdf .bbl .blg)
+
+arch :
+ zip $(ARCHNAME).zip $(ARCHFILES)
+
+tds:
+ cp -u Changes $(TDS)/doc/generic/$(PACKAGE)/
+ cp -u README $(TDS)/doc/generic/$(PACKAGE)/
+ cp -u $(MAIN).pdf $(TDS)/doc/generic/$(PACKAGE)/
+#
+ cp -u Changes $(TDS)/tex/latex/$(PACKAGE)/
+ cp -u $(PACKAGE).sty $(TDS)/tex/latex/$(PACKAGE)/
+#
+ cp -u Changes $(TDS)/tex/generic/$(PACKAGE)/
+ cp -u $(PACKAGE).tex $(TDS)/tex/generic/$(PACKAGE)/
+#
+ cp -u Changes $(TDS)/dvips/$(PACKAGE)/
+ cp -u $(PACKAGE).pro $(TDS)/dvips/$(PACKAGE)/
+#
+ cp -u Changes $(TDS)/source/$(PACKAGE)/
+ cp -u $(MAIN).tex $(TDS)/source/$(PACKAGE)/
+ cp -u $(MAIN).bib $(TDS)/source/$(PACKAGE)/
+ cp -u Makefile $(TDS)/source/$(PACKAGE)/
+
+
+# EOF
diff --git a/Master/texmf-dist/tex/generic/pst-mirror/pst-mirror.tex b/Master/texmf-dist/tex/generic/pst-mirror/pst-mirror.tex
new file mode 100644
index 00000000000..df2f18d1738
--- /dev/null
+++ b/Master/texmf-dist/tex/generic/pst-mirror/pst-mirror.tex
@@ -0,0 +1,1304 @@
+%% $Id: pst-mirror.tex 168 2009-12-08 17:55:07Z herbert $
+%%
+%% This is file `pst-mirror.tex',
+%%
+%% IMPORTANT NOTICE:
+%%
+%% Package `pst-mirror.tex'
+%%
+%% MAnuel Luque
+%% Herbert Voss
+%%
+%% This program can be redistributed and/or modified under the terms
+%% of the LaTeX Project Public License Distributed from CTAN archives
+%% in directory CTAN:/macros/latex/base/lppl.txt.
+%%
+%% DESCRIPTION:
+%% `pst-mirror' is a PSTricks package to view objects ob a spherical sphere
+%%
+%%
+%
+\csname PSTMirrorLoaded\endcsname
+\let\PSTMirrorLoaded\endinput
+% Requires PSTricks, pst-xkey and pst-node packages
+\ifx\PSTricksLoaded\endinput\else\input pstricks.tex\fi
+\ifx\PSTXKeyLoaded\endinput \else\input pst-xkey \fi
+\ifx\PSTnodesLoaded\endinput\else\input pst-node \fi
+\ifx\MultidoLoaded\endinput \else\input multido.tex \fi
+%
+\def\fileversion{1.00}
+\def\filedate{2009/12/08}%
+\message{`pst-mirror v\fileversion, \filedate\space (ml,hv)}%
+%
+\edef\PstAtCode{\the\catcode`\@} \catcode`\@=11\relax
+\SpecialCoor
+
+\pstheader{pst-mirror.pro}
+\pst@addfams{pst-mirror}
+%
+\definecolor{Beige} {rgb}{0.96,0.96,0.86}
+\definecolor{GrisClair} {rgb}{0.8,0.8,0.8}
+\definecolor{GrisTresClair} {rgb}{0.9,0.9,0.9}
+\definecolor{OrangeTresPale}{cmyk}{0,0.1,0.3,0}
+\definecolor{OrangePale}{cmyk}{0,0.2,0.4,0}
+\definecolor{BleuClair}{cmyk}{0.2,0,0,0}
+\definecolor{LightBlue}{rgb}{.68,.85,.9}
+\definecolor{DarkGreen}{rgb}{0,.85,0}
+\definecolor{Copper}{cmyk}{0,0.9,0.9,0.2}
+%%%%
+\SpecialCoor
+\define@boolkey[psset]{pst-mirror}[Pst@]{visibility}[true]{}
+\define@boolkey[psset]{pst-mirror}[Pst@]{isolatin}[false]{}
+\define@boolkey[psset]{pst-mirror}[Pst@Mirror]{Sphere}[true]{}
+\psset[pst-mirror]{Sphere,visibility,isolatin=true}
+
+\define@key[psset]{pst-mirror}{Xmax}[50]{\def\psk@Sphere@Xmax{#1}} % en cm
+\define@key[psset]{pst-mirror}{Xmin}[-50]{\def\psk@Sphere@Xmin{#1}} % en cm
+\define@key[psset]{pst-mirror}{Ymax}[50]{\def\psk@Sphere@Ymax{#1}} % en cm
+\define@key[psset]{pst-mirror}{Ymin}[-50]{\def\psk@Sphere@Ymin{#1}} % en cm
+\define@key[psset]{pst-mirror}{pas}[1]{\def\psk@Sphere@pas{#1}} % en cm résolution du tracé
+\define@key[psset]{pst-mirror}{scale}[1]{\def\psk@Sphere@scale{#1}} % echelle
+\define@key[psset]{pst-mirror}{distance}[30]{\def\psk@Sphere@Distance{#1}} % Distance du quadrillage à la Sphere en cm
+\define@key[psset]{pst-mirror}{Rayon}[10]{\def\psk@Sphere@Rayon{#1}} % rayon de la Sphere en cm
+\define@key[psset]{pst-mirror}{grille}[10]{\def\psk@Sphere@grille{#1}} % Pas de la grille en cm
+\define@key[psset]{pst-mirror}{normale}[0 0]{\def\psk@Sphere@normale{#1}}
+\psset[pst-mirror]{normale=0 0}
+\define@key[psset]{pst-mirror}{Xorigine}[\psk@Sphere@Distance]{\def\psk@Sphere@Xorigine{#1}} % coordonnées de la nouvelle origine
+\define@key[psset]{pst-mirror}{Yorigine}[0]{\def\psk@Sphere@Yorigine{#1}} % coordonnées de la nouvelle origine
+\define@key[psset]{pst-mirror}{Zorigine}[0]{\def\psk@Sphere@Zorigine{#1}} % coordonnées de la nouvelle origine
+\define@key[psset]{pst-mirror}{RotX}[0]{\def\psk@Sphere@RotX{#1}} % rotation autour de Ox en degrés
+\define@key[psset]{pst-mirror}{RotY}[0]{\def\psk@Sphere@RotY{#1}} % rotation autour de Oy en degrés
+\define@key[psset]{pst-mirror}{RotZ}[0]{\def\psk@Sphere@RotZ{#1}} % rotation autour de OZ en degrés
+\define@key[psset]{pst-mirror}{A}[10]{\def\psk@Sphere@A{#1}} % double d'une arête du parallèlépipède
+\define@key[psset]{pst-mirror}{B}[10]{\def\psk@Sphere@B{#1}} % double d'une arête du parallèlépipède
+\define@key[psset]{pst-mirror}{C}[10]{\def\psk@Sphere@C{#1}} % double de l'arête du parallèlépipède
+\define@key[psset]{pst-mirror}{CX}[0]{\def\psk@Sphere@Xc{#1}} % abscisse du centre du paarallèlépipède
+\define@key[psset]{pst-mirror}{CY}[0]{\def\psk@Sphere@Yc{#1}} % ordonnée centre du cube
+\define@key[psset]{pst-mirror}{CZ}[0]{\def\psk@Sphere@Zc{#1}} % cote centre du cube
+\define@key[psset]{pst-mirror}{Rtetraedre}[5]{\def\psk@Sphere@Rtetraedre{#1}} % Rayon du cercle tétraèdre
+\define@key[psset]{pst-mirror}{ColorFaceA}[magenta]{\def\psk@Sphere@TetraedreColorFaceA{#1}} % couleur de la face A du tétraèdre
+\define@key[psset]{pst-mirror}{ColorFaceB}[red]{\def\psk@Sphere@TetraedreColorFaceB{#1}} % couleur de la face B du tétraèdre
+\define@key[psset]{pst-mirror}{ColorFaceC}[blue]{\def\psk@Sphere@TetraedreColorFaceC{#1}} % couleur de la face C du tétraèdre
+\define@key[psset]{pst-mirror}{ColorFaceD}[cyan]{\def\psk@Sphere@TetraedreColorFaceD{#1}} % couleur de la face D du tétraèdre
+\define@key[psset]{pst-mirror}{ColorFaceE}[yellow]{\def\psk@Sphere@TetraedreColorFaceE{#1}} % couleur de la face D du tétraèdre
+\define@key[psset]{pst-mirror}{fracHcone}[1]{\def\psk@Sphere@fracHcone{#1}} % fraction de la hauteur du cone
+\define@key[psset]{pst-mirror}{Hpyramide}[5]{\def\psk@Sphere@Hpyramide{#1}} % hauteur pyramide
+
+% choix de la police et de la taille des caractères en cm !!
+\define@key[psset]{pst-mirror}{PSfont}[Times-Roman]{\def\psk@PSfont{/#1 }}
+\define@key[psset]{pst-mirror}{fontscale}[1]{\def\psk@fontscale{#1 }}
+\define@key[psset]{pst-mirror}{xlabelsep}[-0.5]{\def\psk@xlabelsep{#1 }}
+\define@key[psset]{pst-mirror}{ylabelsep}[-0.5]{\def\psk@ylabelsep{#1 }}
+\define@key[psset]{pst-mirror}{xO}[0]{\def\pst@SphereMirror@xO{#1 }} % origine du texte
+\define@key[psset]{pst-mirror}{yO}[0]{\def\pst@SphereMirror@yO{#1 }}
+\define@key[psset]{pst-mirror}{translation}[0 0 0]{\def\psk@SphereMirror@translation{#1}} % vecteur translation
+\psset[pst-mirror]{PSfont=Times-Roman,fontscale=1,xlabelsep=-0.5,ylabelsep=-0.5,xO=0,yO=0,translation=0 0 0}
+%
+\psset{Xmax=50,Ymax=50,Xmin=-50,Ymin=-50,pas=1,grille=10,distance=30,Rayon=10,scale=1,
+ Xorigine=\psk@Sphere@Distance,Yorigine=0,Zorigine=0,RotX=0,RotY=0,RotZ=0,
+ A=10,B=10,C=10,CX=0,CY=0,CZ=0,Rtetraedre=5,
+ ColorFaceD=cyan,ColorFaceA=magenta,ColorFaceB=red,ColorFaceC=blue,ColorFaceE=yellow,
+ fracHcone=1,Hpyramide=5}
+%
+\def\variables@Sphere{
+ 0 0 translate
+ /cm { \pst@number\psunit mul } def
+ /cm_1 { \pst@number\psunit div } def
+ %% Caracteres accentues
+ /ReEncode { exch findfont
+ dup length dict begin { 1 index /FID eq {pop pop} {def} ifelse
+ }forall
+ /Encoding ISOLatin1Encoding def currentdict end definefont
+ pop
+ } bind def
+ \ifPst@isolatin
+ /Font \psk@PSfont\space /ISOfont ReEncode /ISOfont def
+ \else
+ /Font \psk@PSfont\space def
+ \fi
+ /SizeFont { \psk@fontscale\space cm } bind def
+ Font findfont SizeFont scalefont setfont
+ /x0 \pst@SphereMirror@xO def % pour positionner le texte
+ /y0 \pst@SphereMirror@yO def %
+ /Xmax \psk@Sphere@Xmax\space def
+ /Ymax \psk@Sphere@Ymax\space def
+ /Xmin \psk@Sphere@Xmin\space def
+ /Ymin \psk@Sphere@Ymin\space def
+ /pas \psk@Sphere@pas\space def
+ /Xabscisse \psk@Sphere@Distance\space def
+ /Rayon \psk@Sphere@Rayon\space def
+ /grille \psk@Sphere@grille\space def
+ /reduction \psk@Sphere@scale\space def
+ \psk@Sphere@normale\space /K_phi exch def /K_theta exch def
+ /S1 K_theta sin def
+ /C1 K_theta cos def
+ /S2 K_phi sin def
+ /C2 K_phi cos def
+ /RotX \psk@Sphere@RotX\space def
+ /RotY \psk@Sphere@RotY\space def
+ /RotZ \psk@Sphere@RotZ\space def
+% /translation {\psk@SphereMirror@translation} def
+% translation /vz 0 def /vy 0 def /vx 0 def
+ /CX \psk@Sphere@Xc\space def
+ /CY \psk@Sphere@Yc\space def
+ /CZ \psk@Sphere@Zc\space def
+ /A \psk@Sphere@A\space def
+ /B \psk@Sphere@B\space def
+ /C \psk@Sphere@C\space def
+ /RayonBaseTetraedre \psk@Sphere@Rtetraedre\space def
+ /Hpyramide \psk@Sphere@Hpyramide\space def
+ /Rpoint A 4 div def
+ /M11 RotZ cos RotY cos mul def
+ /M12 RotZ cos RotY sin mul RotX sin mul RotZ sin RotX cos mul sub def
+ /M13 RotZ cos RotY sin mul RotX cos mul RotZ sin RotX sin mul add def
+ /M21 RotZ sin RotY cos mul def
+ /M22 RotZ sin RotY sin RotX sin mul mul RotZ cos RotX cos mul add def
+ /M23 RotZ sin RotY sin mul RotX cos mul RotZ cos RotX sin mul sub def
+ /M31 RotY sin neg def
+ /M32 RotX sin RotY cos mul def
+ /M33 RotX cos RotY cos mul def
+ /CalculsPointsApresTransformations { 1 dict begin
+ M11 Xpoint mul M12 Ypoint mul add M13 Zpoint mul add CX add
+ M21 Xpoint mul M22 Ypoint mul add M23 Zpoint mul add CY add
+ M31 Xpoint mul M32 Ypoint mul add M33 Zpoint mul add CZ add
+ end
+ } def
+ /3dto2d {8 dict begin
+ /Zcote exch def
+ /Yordonnee exch def
+ /Xabscisse exch def
+ /RHO Zcote dup mul Yordonnee dup mul add sqrt def
+ /incidence RHO Xabscisse Atan 2 div def
+ /RHO' incidence sin Rayon mul def
+ RHO 0 eq {/Xi 0 def /Yi 0 def}{/Yi RHO' RHO div Zcote mul def
+ /Xi RHO' RHO div Yordonnee mul neg def } ifelse
+ Xi cm %% c'est Xi cm
+ Yi cm %% c'est Yi cm
+ end } def
+}%
+
+\def\pstTextSphere{\pst@object{pstTextSphere}}
+\def\pstTextSphere@i{\@ifnextchar({\pstTextSphere@ii}{\pstTextSphere@ii(0,0,0)}}
+\def\pstTextSphere@ii(#1,#2,#3)#4{%
+ \begin@ClosedObj
+ \addto@pscode{%
+ \variables@Sphere
+ tx@Sphere3DDict begin
+ \ifPst@visibility /Condition { gt } def \else /Condition { le } def \fi
+ /warptxt (#4) def
+ /warpwidth { warptxt stringwidth pop } bind def %% largeur horizontale du texte
+ /warpheigth { SizeFont 2 div } bind def %% hauteur verticale du texte
+ /warpxhalf warpwidth 2 div def %% demi-largeur horizontale
+ /warpyhalf warpheigth 2 div def %% demi-hauteur
+ /x0 x0 warpxhalf neg cm_1 add def % centre le texte
+ /y0 y0 warpyhalf neg cm_1 add def
+ /warp {
+ 5 dict begin
+ /Ypoint exch cm_1 y0 add def
+ /Xpoint exch cm_1 x0 add def
+ %% coordonnées dans le repère absolu
+ 2dto3d
+ /Zpoint exch def
+ /Ypoint exch def
+ /Xpoint exch def
+ CalculsPointsApresTransformations
+ 3dto2d
+ end
+ } bind def
+ #1 #2 #3 tx@TransformPlan
+ tx@WARP
+ 0 0 moveto
+ warptxt true charpath
+ 10 currentpathsegmenteline
+ % rotation possible ici
+ % alpha 2 div rotate
+ warpit
+ end
+ }%
+ \end@ClosedObj\ignorespaces}
+%
+\def\pstCube{\pst@object{pstCube}}
+\def\pstCube@i{%
+ \pst@killglue
+ \begin@ClosedObj
+ \addto@pscode{%
+ \variables@Sphere
+ tx@Sphere3DDict begin
+ Cube
+ end
+ }% fin du code ps
+ \end@ClosedObj\ignorespaces}
+%
+\def\pstDie{%
+ \pstCube
+ \begin@ClosedObj
+ \addto@pscode{%
+ \variables@Sphere
+ tx@Sphere3DDict begin
+ Cube
+ PointsDie
+ end
+ }% fin du code ps
+ \end@ClosedObj}
+%
+\def\pstTetraedre{\pst@object{pstTetraedre}}
+\def\Tetraedre@i{%
+ \pst@killglue
+ \begin@ClosedObj
+ \addto@pscode{%
+ \variables@Sphere
+ tx@Sphere3DDict begin
+ Tetraedre
+ end
+ }% fin du code ps
+ \end@ClosedObj\ignorespaces}
+%
+% transformation d'un point
+\def\pstSpherePoint{\pst@object{pstSpherePoint}}
+\def\pstSpherePoint@i(#1,#2,#3)#4{%
+ %(#2,#3,#4) coordonnées
+ % #5 nom attribué au point
+ \pst@killglue
+ \begin@SpecialObj
+ \pnode(!
+ \variables@Sphere
+ /Zcote #3 def
+ /Xabscisse #1 def
+ /Yordonnee #2 def
+ tx@Sphere3DDict begin
+ FormulesSphere
+ Xi reduction mul Yi reduction mul
+ end){#4}
+ \end@SpecialObj\ignorespaces}
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% \psSphereLine est
+%% adapté de la macro \pstThreeDLine du package pst-3dplot (H.Voss)
+%% http://tug.ctan.org/tex-archive/graphics/pstricks/contrib/pst-3dplot
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% 7 juillet 2008
+\def\CartesianIIID@coor#1,#2,#3,#4\@nil{\edef\pst@coor{#1 #2 #3 }}
+\def\NormalIIIDCoor{%
+ \def\pst@@getcoor##1{\pst@expandafter\CartesianIIID@coor{##1}, ,\@nil}%
+ \def\psput@##1{\pst@@getcoor{##1}\leavevmode\psput@cartesian}%
+}%
+\def\pstSphereLine{\NormalIIIDCoor\pst@object{pstSphereLine}}
+\def\pstSphereLine@i{%
+ \pst@killglue%
+ \pst@getarrows{%
+ \begin@OpenObj%
+ \pst@getcoors[\pstSphereLine@ii%
+ }%
+}
+\def\pstSphereLine@ii{%
+ \addto@pscode{%
+ ] /LesPoints exch def
+\variables@Sphere
+tx@Sphere3DDict begin
+/n1 LesPoints length 3 div cvi def % nbre de points
+/i 0 def
+/TableauPoints [
+n1 {
+ [ LesPoints i get
+ LesPoints i 1 add get
+ LesPoints i 2 add get
+ ]
+ /i i 3 add def
+ }repeat
+ ] def
+% Tableau general des points
+/TAB [
+0 1 n1 2 sub {/i ED
+ TableauPoints i get aload pop
+ /Z1 ED /Y1 ED /X1 ED
+ TableauPoints i 1 add get aload pop
+ /Z2 ED /Y2 ED /X2 ED
+0 0.01 1.0 { % k
+ /K exch def
+ [
+ /Zcote K Z2 mul 1 K sub Z1 mul add def
+ /Xabscisse K X2 mul 1 K sub X1 mul add def
+ /Yordonnee K Y2 mul 1 K sub Y1 mul add def
+ CalcCoordinates
+ ]
+ } for
+} for
+] def
+/n2 TAB length def
+ TAB 0 get aload pop moveto
+0 1 n2 1 sub {
+ /compteur exch def
+ TAB compteur get aload pop
+ lineto } for
+% fin du tracé de la ligne
+end
+ }\end@OpenObj%
+ \ignorespaces%
+ \SpecialCoor%
+}
+
+\def\pstSpherePolygon{\NormalIIIDCoor\pst@object{pstSpherePolygon}}
+\def\pstSpherePolygon@i{%
+ \pst@killglue%
+ \pst@getarrows{%
+ \begin@ClosedObj%
+ \pst@getcoors[\pstSpherePolygon@ii%
+ }%
+}
+\def\pstSpherePolygon@ii{%
+ \addto@pscode{%
+ ] /LesPoints exch def
+ \variables@Sphere
+ tx@Sphere3DDict begin
+ /n1 LesPoints length 3 div cvi def % nbre de points
+ /i 0 def
+ /TableauPoints [
+ n1 {
+ [ LesPoints i get
+ LesPoints i 1 add get
+ LesPoints i 2 add get
+ ]
+ /i i 3 add def
+ }repeat
+ ] def
+ % Tableau general des points
+ /TAB [
+ 0 1 n1 2 sub {/i ED
+ TableauPoints i get aload pop
+ /Z1 ED /Y1 ED /X1 ED
+ TableauPoints i 1 add get aload pop
+ /Z2 ED /Y2 ED /X2 ED
+ 0 0.01 1.0 { % k
+ /K exch def
+ [ /Zcote K Z2 mul 1 K sub Z1 mul add def
+ /Xabscisse K X2 mul 1 K sub X1 mul add def
+ /Yordonnee K Y2 mul 1 K sub Y1 mul add def
+ CalcCoordinates ]
+ } for
+ } for
+ ] def
+ /n2 TAB length def
+ newpath
+ TAB 0 get aload pop moveto
+ 0 1 n2 1 sub {
+ /compteur exch def
+ TAB compteur get aload pop
+ lineto
+ } for
+ closepath
+ end
+ }%
+ \end@ClosedObj%
+ \ignorespaces%
+ \SpecialCoor%
+}
+%
+\def\pstSphereCircle{\pst@object{pstSphereCircle}}
+\def\pstSphereCircle@i#1{% #1 rayon du cercle
+ \pst@killglue
+ \begin@ClosedObj
+ \addto@pscode{%
+ /Rcercle #1 def
+ \variables@Sphere
+ /XO' \psk@Sphere@Xorigine\space def
+ /YO' \psk@Sphere@Yorigine\space def
+ /ZO' \psk@Sphere@Zorigine\space def
+ tx@Sphere3DDict begin
+ reduction reduction scale
+ /TableauxPoints [
+ 0 1 359 {% on décrit le cercle
+ /Angle exch def [
+ /Xcercle Rcercle Angle cos mul def
+ /Ycercle Rcercle Angle sin mul def
+ /Xabscisse Xcercle S1 mul Ycercle S2 C1 mul mul add XO' add def
+ /Yordonnee Xcercle C1 mul neg Ycercle S2 S1 mul mul add YO' add def
+ /Zcote Ycercle C2 mul neg ZO' add def
+ CalcCoordinates ]
+ } for
+ ] def
+ TableauxPoints 0 get aload pop moveto
+ 0 1 359 {
+ /compteur exch def
+ TableauxPoints compteur get aload pop
+ lineto
+ } for
+ end
+ }% fin du code ps
+ \showpointsfalse
+ \end@ClosedObj\ignorespaces}
+%
+\def\pstSphereArc{\pst@object{pstSphereArc}}
+\def\pstSphereArc@i#1#2#3{% #2 rayon du cercle #3 angle de depart #4 angle d'arrivee
+ \pst@killglue
+ \begin@OpenObj
+ \addto@pscode{%
+ /Rcercle #1 def
+ /AngleStart #2 def
+ /AngleStop #3 def
+ \variables@Sphere
+ /XO' \psk@Sphere@Xorigine\space def
+ /YO' \psk@Sphere@Yorigine\space def
+ /ZO' \psk@Sphere@Zorigine\space def
+ tx@Sphere3DDict begin
+ reduction reduction scale
+ /TableauxPoints [
+ AngleStart 1 AngleStop {% on decrit le cercle
+ /Angle exch def [
+ /Xcercle Rcercle Angle cos mul def
+ /Ycercle Rcercle Angle sin mul def
+ /Xabscisse Xcercle S1 mul Ycercle S2 C1 mul mul add XO' add def
+ /Yordonnee Xcercle C1 mul neg Ycercle S2 S1 mul mul add YO' add def
+ /Zcote Ycercle C2 mul neg ZO' add def
+ CalcCoordinates ] } for ] def
+ TableauxPoints 0 get aload pop moveto
+ 0 1 AngleStop AngleStart sub abs {
+ /compteur exch def
+ TableauxPoints compteur get aload pop
+ lineto
+ } for
+ end
+ }% fin du code ps
+ \showpointsfalse
+ \end@OpenObj\ignorespaces}
+%
+\def\pstSphereFrame{\pst@object{pstSphereFrame}}
+\def\pstSphereFrame@i(#1,#2)(#3,#4){% (#1,#2) d'un sommet (#3,#4) du sommet oppose
+ \pst@killglue
+ \begin@ClosedObj
+ \addto@pscode{%
+ /XA #1 def /YA #2 def /XC #3 def /YC #4 def
+ % on en deduit les autres sommets
+ /XB XC def /YB YA def /XD XA def /YD YC def
+ \variables@Sphere
+ /XO' \psk@Sphere@Xorigine\space def
+ /YO' \psk@Sphere@Yorigine\space def
+ /ZO' \psk@Sphere@Zorigine\space def
+ tx@Sphere3DDict begin
+ reduction reduction scale
+ /Xframe XA def
+ /Yframe YA def
+ /Xabscisse Xframe S1 mul Yframe S2 C1 mul mul add XO' add def
+ /Yordonnee Xframe C1 mul neg Yframe S2 S1 mul mul add YO' add def
+ /Zcote Yframe C2 mul neg ZO' add def
+ CalcCoordinates
+ moveto
+ 0 0.01 1 { % k
+ /K exch def
+ /Xframe K XB mul 1 K sub XA mul add def
+ /Yframe K YB mul 1 K sub YA mul add def
+ /Xabscisse Xframe S1 mul Yframe S2 C1 mul mul add XO' add def
+ /Yordonnee Xframe C1 mul neg Yframe S2 S1 mul mul add YO' add def
+ /Zcote Yframe C2 mul neg ZO' add def
+ CalcCoordinates
+ lineto
+ } for
+ 0 0.01 1 { % k
+ /K exch def
+ /Xframe K XC mul 1 K sub XB mul add def
+ /Yframe K YC mul 1 K sub YB mul add def
+ /Xabscisse Xframe S1 mul Yframe S2 C1 mul mul add XO' add def
+ /Yordonnee Xframe C1 mul neg Yframe S2 S1 mul mul add YO' add def
+ /Zcote Yframe C2 mul neg ZO' add def
+ CalcCoordinates
+ lineto
+ } for
+ 0 0.01 1 { % k
+ /K exch def
+ /Xframe K XD mul 1 K sub XC mul add def
+ /Yframe K YD mul 1 K sub YC mul add def
+ /Xabscisse Xframe S1 mul Yframe S2 C1 mul mul add XO' add def
+ /Yordonnee Xframe C1 mul neg Yframe S2 S1 mul mul add YO' add def
+ /Zcote Yframe C2 mul neg ZO' add def
+ CalcCoordinates
+ lineto
+ } for
+ 0 0.01 1 { % k
+ /K exch def
+ /Xframe K XA mul 1 K sub XD mul add def
+ /Yframe K YA mul 1 K sub YD mul add def
+ /Xabscisse Xframe S1 mul Yframe S2 C1 mul mul add XO' add def
+ /Yordonnee Xframe C1 mul neg Yframe S2 S1 mul mul add YO' add def
+ /Zcote Yframe C2 mul neg ZO' add def
+ CalcCoordinates
+ lineto
+ } for
+ end
+ }% fin du code ps
+ \showpointsfalse
+ \end@ClosedObj\ignorespaces}
+%
+\def\pstSphereGrid{\pst@object{pstSphereGrid}}
+\def\pstSphereGrid@i(#1,#2,#3){%
+ \pst@killglue
+ \begin@OpenObj
+ \addto@pscode{%
+ \variables@Sphere
+ /XO' #1 def %\psk@Sphere@Xorigine\space def
+ /YO' #2 def %\psk@Sphere@Yorigine\space def
+ /ZO' #3 def %\psk@Sphere@Zorigine\space def
+ tx@Sphere3DDict begin
+ reduction reduction scale
+ Ymin grille Ymax {% balayage suivant Oy
+ /Ygrille exch def
+ /TableauxPoints [
+ Xmin pas Xmax { % balayage suivant Ox
+ /Xgrille exch def
+ /Xabscisse Xgrille S1 mul Ygrille S2 C1 mul mul add XO' add def
+ /Yordonnee Xgrille C1 mul neg Ygrille S2 S1 mul mul add YO' add def
+ /Zcote Ygrille C2 mul neg ZO' add def
+ FormulesSphere [ Xi 28.45 mul Yi 28.45 mul ]
+ } for
+ ] def
+ TableauxPoints 0 get aload pop moveto
+ 0 1 Xmax Xmin sub pas div {
+ /compteur exch def
+ TableauxPoints compteur get aload pop
+ lineto
+ } for
+ % stroke
+ } for
+%
+ Xmin grille Xmax {% balayage suivant Ox
+ /Xgrille exch def
+ /TableauxPoints [
+ Ymin pas Ymax { % balayage suivant Ox
+ /Ygrille exch def
+ /Xabscisse Xgrille S1 mul Ygrille S2 C1 mul mul add XO' add def
+ /Yordonnee Xgrille C1 mul neg Ygrille S2 S1 mul mul add YO' add def
+ /Zcote Ygrille C2 mul neg ZO' add def
+ FormulesSphere [ Xi 28.45 mul Yi 28.45 mul ]
+ } for
+ ] def
+ TableauxPoints 0 get aload pop moveto
+ 0 1 Ymax Ymin sub pas div {
+ /compteur exch def
+ TableauxPoints compteur get aload pop
+ lineto
+ } for
+ \pst@number\pslinewidth SLW
+ \pst@usecolor\pslinecolor
+ \@nameuse{psls@\pslinestyle}
+ % stroke
+ } for
+ \ifPst@MirrorSphere
+ newpath
+ 0 0 Rayon 0.707 mul 28.45 mul 0 360 arc
+ [3] 0 setdash
+ stroke
+ \fi
+% fin du tracé
+ end
+ }% fin du code ps
+ \end@OpenObj\ignorespaces}%
+%
+\def\pstMirrorSphere{\pst@object{pstMirrorSphere}}
+\def\pstMirrorSphere@i#1{%
+% (#2,#3,#4) coordonnées du centre
+% #5 rayon
+ \pst@killglue
+ \begin@ClosedObj
+ \addto@pscode{%
+ \variables@Sphere
+ reduction reduction scale
+ /Rsphere #1 def
+ /increment 10 def
+ tx@Sphere3DDict begin
+ 0 increment 360 increment sub {%
+ /theta exch def
+ -90 increment 90 increment sub {%
+ /phi exch def
+ % newpath
+ /Xpoint Rsphere theta cos mul phi cos mul def
+ /Ypoint Rsphere theta sin mul phi cos mul def
+ /Zpoint Rsphere phi sin mul def
+ CalculsPointsAfterTransformations
+ CalcCoordinates
+ moveto
+% Centre de la facette
+ /Xpoint Rsphere theta increment 2 div add cos mul phi increment 2 div add cos mul def
+ /Ypoint Rsphere theta increment 2 div add sin mul phi increment 2 div add cos mul def
+ /Zpoint Rsphere phi increment 2 div add sin mul def
+ CalculsPointsAfterTransformations
+ /xCentreFacette Xabscisse def
+ /yCentreFacette Yordonnee def
+ /zCentreFacette Zcote def
+ /xCentreFacette Xabscisse def
+ /yCentreFacette Yordonnee def
+ /zCentreFacette Zcote def
+% normale `a la facette
+ /nXfacette xCentreFacette CX sub def
+ /nYfacette yCentreFacette CY sub def
+ /nZfacette zCentreFacette CZ sub def
+% test de visibilité
+ /PSfacette xCentreFacette nXfacette mul
+ yCentreFacette nYfacette mul add
+ zCentreFacette nZfacette mul add def
+ PSfacette 0 le {
+ theta 1 theta increment add {%
+ /theta1 exch def
+ /Xpoint Rsphere theta1 cos mul phi cos mul def
+ /Ypoint Rsphere theta1 sin mul phi cos mul def
+ /Zpoint Rsphere phi sin mul def
+ CalculsPointsAfterTransformations
+ CalcCoordinates
+ lineto
+ } for
+ phi 1 phi increment add {
+ /phi1 exch def
+ /Xpoint Rsphere theta increment add cos mul phi1 cos mul def
+ /Ypoint Rsphere theta increment add sin mul phi1 cos mul def
+ /Zpoint Rsphere phi1 sin mul def
+CalculsPointsAfterTransformations
+ CalcCoordinates
+ lineto
+ } for
+theta increment add -1 theta {%
+ /theta1 exch def
+ /Xpoint Rsphere theta1 cos mul phi increment add cos mul def
+ /Ypoint Rsphere theta1 sin mul phi increment add cos mul def
+ /Zpoint Rsphere phi increment add sin mul def
+CalculsPointsAfterTransformations
+ CalcCoordinates
+ lineto
+ } for
+phi increment add -1 phi {
+ /phi1 exch def
+ /Xpoint Rsphere theta cos mul phi1 cos mul def
+ /Ypoint Rsphere theta sin mul phi1 cos mul def
+ /Zpoint Rsphere phi1 sin mul def
+CalculsPointsAfterTransformations
+ CalcCoordinates
+ lineto
+ } for
+} if
+%closepath
+%fill
+} for
+} for
+end
+ }% fin du code ps
+ \showpointsfalse
+ \end@ClosedObj\ignorespaces}
+%
+%
+\def\pstSphereCylinder{\pst@object{pstSphereCylinder}}
+\def\pstSphereCylinder@i#1#2{{%
+% Le centre de la base sera placé avec
+% les paramètres CX,CY et CZ
+% #2 rayon
+% #3 hauteur
+% on peut ensuite faire tourner le cylindre
+% avec RotX, RotY et RotZ
+\pst@killglue
+\begin@ClosedObj
+\addto@pscode{%
+\variables@Sphere
+reduction reduction scale
+ /Rcylindre #1 def
+ /Hcylindre #2 def
+ /incrementANGLE 10 def
+ /incrementHAUTEUR Hcylindre 5 div def
+tx@Sphere3DDict begin
+0 incrementANGLE 360 {%
+ /theta exch def
+ 0 incrementHAUTEUR Hcylindre incrementHAUTEUR sub {%
+ /H exch def
+% newpath
+ /X1 Rcylindre theta cos mul def
+ /Y1 Rcylindre theta sin mul def
+ /Z1 H def
+ /Xpoint X1 def
+ /Ypoint Y1 def
+ /Zpoint Z1 def
+CalculsPointsAfterTransformations
+ /Xfacette Xabscisse def
+ /Yfacette Yordonnee def
+ /Zfacette Zcote def
+ CalcCoordinates
+ moveto
+% coordonnées du centre de la facette
+ /Xpoint Rcylindre theta incrementANGLE 2 div add cos mul def
+ /Ypoint Rcylindre theta incrementANGLE 2 div add sin mul def
+ /Zpoint H incrementHAUTEUR 2 div add def
+CalculsPointsAfterTransformations
+% Point sur l'axe du cylindre
+% à la même hauteur que M1
+ /Zpoint Z1 def
+ /Xpoint 0 def
+ /Ypoint 0 def
+CalculsPointsAfterTransformations
+% normale à la facette
+ /nXfacette Xfacette Xabscisse sub def
+ /nYfacette Yfacette Yordonnee sub def
+ /nZfacette Zfacette Zcote sub def
+% test de visibilité
+ /PSfacette nXfacette Xfacette mul
+ nYfacette Yfacette mul add
+ nZfacette Zfacette mul add
+ def
+PSfacette 0 le {
+theta 1 theta incrementANGLE add {%
+ /theta1 exch def
+ /Xpoint Rcylindre theta1 cos mul def
+ /Ypoint Rcylindre theta1 sin mul def
+ /Zpoint H def
+CalculsPointsAfterTransformations
+ CalcCoordinates
+ lineto
+ } for
+H 1 H incrementHAUTEUR add {
+ /H1 exch def
+ /Xpoint Rcylindre theta incrementANGLE add cos mul def
+ /Ypoint Rcylindre theta incrementANGLE add sin mul def
+ /Zpoint H1 def
+CalculsPointsAfterTransformations
+ CalcCoordinates
+ lineto
+ } for
+theta incrementANGLE add -1 theta {%
+ /theta1 exch def
+ /Xpoint Rcylindre theta1 cos mul def
+ /Ypoint Rcylindre theta1 sin mul def
+ /Zpoint H incrementHAUTEUR add def
+CalculsPointsAfterTransformations
+ CalcCoordinates
+ lineto
+ } for
+H incrementHAUTEUR add -1 H {
+ /H1 exch def
+ /Xpoint Rcylindre theta cos mul def
+ /Ypoint Rcylindre theta sin mul def
+ /Zpoint H1 def
+CalculsPointsAfterTransformations
+ CalcCoordinates
+ lineto
+ } for
+} if
+} for
+} for
+% Face supérieure
+% centre de la face supérieure
+ /Xpoint 0 def
+ /Zpoint Hcylindre def
+ /Ypoint 0 def
+CalculsPointsAfterTransformations
+ /CxFaceSup Xabscisse def
+ /CyFaceSup Yordonnee def
+ /CzFaceSup Zcote def
+% centre de la face inférieure
+ /CxFaceInf CX def
+ /CyFaceInf CY def
+ /CzFaceInf CZ def
+% Normale à la face supérieure
+ /nXFaceSup CxFaceSup CxFaceInf sub def
+ /nYFaceSup CyFaceSup CyFaceInf sub def
+ /nZFaceSup CzFaceSup CzFaceInf sub def
+% Visibilité face supérieure
+ /PSfaceSup nXFaceSup CxFaceSup mul
+ nYFaceSup CyFaceSup mul add
+ nZFaceSup CzFaceSup mul add def
+% Visibilité face inférieure
+ /PSfaceInf CX nXFaceSup mul neg
+ CY nYFaceSup mul sub
+ CZ nZFaceSup mul sub def
+PSfaceSup 0 le {
+/TableauxPoints [
+0 1 359 {% on décrit le cercle
+ /theta exch def [
+ /Xpoint Rcylindre theta cos mul def
+ /Ypoint Rcylindre theta sin mul def
+ /Zpoint Hcylindre def
+CalculsPointsAfterTransformations
+ CalcCoordinates ]
+ } for
+ ] def
+gsave
+newpath
+ TableauxPoints 0 get aload pop moveto
+0 1 359 {
+ /compteur exch def
+ TableauxPoints compteur get aload pop
+ lineto } for
+0.7 setgray
+closepath
+fill
+grestore
+ } if
+% face inférieure
+PSfaceInf 0 le {
+/TableauxPoints [
+0 1 359 {% on décrit le cercle
+ /theta exch def [
+ /Xpoint Rcylindre theta cos mul def
+ /Ypoint Rcylindre theta sin mul def
+ /Zpoint 0 def
+CalculsPointsAfterTransformations
+ CalcCoordinates ]
+ } for
+ ] def
+gsave
+newpath
+ TableauxPoints 0 get aload pop moveto
+ 0 1 359 {
+ /compteur exch def
+ TableauxPoints compteur get aload pop
+ lineto } for
+0.7 setgray
+closepath
+fill
+grestore
+ } if
+end
+ }% fin du code ps
+ \showpointsfalse
+ \end@ClosedObj}\ignorespaces}% % fin de la commande PSTricks
+%
+%
+\def\pstSphereCone{\pst@object{pstSphereCone}}
+\def\pstSphereCone@i#1#2{{%
+% Le centre de la base sera placé avec
+% les paramètres CX,CY et CZ
+% #2 rayon
+% #3 hauteur
+% on peut ensuite faire tourner le cylindre
+% avec RotX, RotY et RotZ
+ \pst@killglue
+ \begin@ClosedObj
+ \addto@pscode{%
+ \variables@Sphere
+ /fracHcone \psk@Sphere@fracHcone\space def
+% fraction de la hauteur du cone 0<fracHcone<1
+ reduction reduction scale
+ /Rcone #1 def
+ /Hcone #2 def
+ /AngleCone Rcone Hcone atan def
+ /TanAngleCone AngleCone dup sin exch cos div def
+ /incrementANGLE 10 def
+ /incrementHAUTEUR Hcone fracHcone mul 5 div def
+ tx@Sphere3DDict begin
+ newpath
+ 0 incrementANGLE 360 {%
+ /theta exch def
+ 0 incrementHAUTEUR Hcone fracHcone mul incrementHAUTEUR sub {%
+ /H exch def
+ % normale à la facette
+ /nXfacette Hcone AngleCone dup sin exch cos mul theta incrementANGLE 2 div add cos mul mul def
+ /nYfacette Hcone AngleCone dup sin exch cos mul theta incrementANGLE 2 div add sin mul mul def
+ /nZfacette Hcone AngleCone sin dup mul mul def
+ /Xpoint nXfacette def
+ /Ypoint nYfacette def
+ /Zpoint nZfacette def
+ CalculsPointsAfterTransformations
+ /nXfacette Xabscisse CX sub def
+ /nYfacette Yordonnee CY sub def
+ /nZfacette Zcote CZ sub def
+%
+ /OK Hcone H sub TanAngleCone mul def
+ /Xpoint OK theta cos mul def
+ /Ypoint OK theta sin mul def
+ /Zpoint H def
+ CalculsPointsAfterTransformations
+ /Xfacette Xabscisse def
+ /Yfacette Yordonnee def
+ /Zfacette Zcote def
+ CalcCoordinates
+ moveto
+% coordonnées du centre de la facette
+ /OK Hcone H incrementHAUTEUR 2 div add sub TanAngleCone mul def
+ /Xpoint OK theta incrementANGLE 2 div add cos mul def
+ /Ypoint OK theta incrementANGLE 2 div add sin mul def
+ /Zpoint H incrementHAUTEUR 2 div add def
+CalculsPointsAfterTransformations
+ /XcentreFacette Xabscisse def
+ /YcentreFacette Yordonnee def
+ /ZcentreFacette Zcote def
+% test de visibilité
+ /PSfacette nXfacette XcentreFacette mul
+ nYfacette YcentreFacette mul add
+ nZfacette ZcentreFacette mul add
+ def
+PSfacette 0 le {
+theta 1 theta incrementANGLE add {%
+ /theta1 exch def
+ /OK Hcone H sub TanAngleCone mul def
+ /Xpoint OK theta1 cos mul def
+ /Ypoint OK theta1 sin mul def
+ /Zpoint H def
+CalculsPointsAfterTransformations
+ CalcCoordinates
+ lineto
+ } for
+H 1 H incrementHAUTEUR add {
+ /H1 exch def
+ /OK Hcone H1 sub TanAngleCone mul def
+ /Xpoint OK theta incrementANGLE add cos mul def
+ /Ypoint OK theta incrementANGLE add sin mul def
+ /Zpoint H1 def
+CalculsPointsAfterTransformations
+ CalcCoordinates
+ lineto
+ } for
+theta incrementANGLE add -1 theta {%
+ /theta1 exch def
+ /OK Hcone H incrementHAUTEUR add sub TanAngleCone mul def
+ /Xpoint OK theta1 cos mul def
+ /Ypoint OK theta1 sin mul def
+ /Zpoint H incrementHAUTEUR add def
+CalculsPointsAfterTransformations
+ CalcCoordinates
+ lineto
+ } for
+H incrementHAUTEUR add -1 H {
+ /H1 exch def
+ /OK Hcone H1 sub TanAngleCone mul def
+ /Xpoint OK theta cos mul def
+ /Ypoint OK theta sin mul def
+ /Zpoint H1 def
+CalculsPointsAfterTransformations
+ CalcCoordinates
+ lineto
+ } for
+} if
+} for
+} for
+% centre de la base inférieure après transformations
+ /CxFaceInf CX def
+ /CyFaceInf CY def
+ /CzFaceInf CZ def
+% centre de la base supérieure avant transformations
+ /CxFaceSup 0 def
+ /CyFaceSup 0 def
+ /CzFaceSup Hcone fracHcone mul def
+% Sommet du cone
+ /Xpoint 0 def
+ /Ypoint 0 def
+ /Zpoint Hcone def
+CalculsPointsAfterTransformations
+ /XsommetCone Xabscisse def
+ /YsommetCone Yordonnee def
+ /ZsommetCone Zcote def
+% Normale extérieure à la base inférieure
+ /nXBaseInf CxFaceInf XsommetCone sub def
+ /nYBaseInf CyFaceInf YsommetCone sub def
+ /nZBaseInf CzFaceInf ZsommetCone sub def
+% centre de la base supérieure
+ /Xpoint CxFaceSup def
+ /Ypoint CyFaceSup def
+ /Zpoint CzFaceSup def
+CalculsPointsAfterTransformations
+ /CxBaseSup Xabscisse def
+ /CyBaseSup Yordonnee def
+ /CzBaseSup Zcote def
+% Normale extérieure à la base supérieure
+ /nXBaseSup XsommetCone CxFaceSup sub def
+ /nYBaseSup YsommetCone CyFaceSup sub def
+ /nZBaseSup ZsommetCone CzFaceSup sub def
+% Visibilité de la base inférieure
+ /PSbaseInfCone nXBaseInf CxFaceInf mul
+ nYBaseInf CyFaceInf mul add
+ nZBaseInf CzFaceInf mul add def
+% Visibilité de la base supérieure
+ /PSbaseSupCone nXBaseSup CxFaceSup mul
+ nYBaseSup CyFaceSup mul add
+ nZBaseSup CzFaceSup mul add def
+PSbaseInfCone 0 le {
+/TableauxPoints [
+0 1 359 {% on décrit le cercle
+ /theta exch def [
+ /Xpoint Rcone theta cos mul def
+ /Ypoint Rcone theta sin mul def
+ /Zpoint 0 def
+CalculsPointsAfterTransformations
+ CalcCoordinates ]
+ } for
+ ] def
+gsave
+newpath
+ TableauxPoints 0 get aload pop moveto
+0 1 359 {
+ /compteur exch def
+ TableauxPoints compteur get aload pop
+ lineto } for
+0.7 setgray
+closepath
+fill
+grestore
+ } if
+PSbaseSupCone 0 le {
+/TableauxPoints [
+0 1 359 {% on décrit le cercle
+ /theta exch def [
+ /OK Hcone 1 fracHcone sub mul TanAngleCone mul def
+ /Xpoint OK theta cos mul def
+ /Ypoint OK theta sin mul def
+ /Zpoint Hcone fracHcone mul def
+CalculsPointsAfterTransformations
+ CalcCoordinates ]
+ } for
+ ] def
+gsave
+newpath
+ TableauxPoints 0 get aload pop moveto
+0 1 359 {
+ /compteur exch def
+ TableauxPoints compteur get aload pop
+ lineto } for
+0.7 setgray
+closepath
+fill
+grestore
+ } if
+end
+ }% fin du code ps
+\showpointsfalse
+\end@ClosedObj}\ignorespaces}%
+%
+% pyramide
+%
+\def\pstFaceSAB{\pst@object{pstFaceSAB}}
+\def\pstFaceSAB@i{{%
+\pst@killglue
+\begin@ClosedObj
+\addto@pscode{%
+ \variables@Sphere
+ tx@Sphere3DDict begin
+ SommetsPyramide
+ PSAB 0 le { %
+ reduction reduction scale
+ 1 setlinejoin
+ /Xabscisse XS def
+ /Yordonnee YS def
+ /Zcote ZS def
+ CalcCoordinates
+ moveto
+ 0 0.01 1 { % k
+ /K exch def
+ /Zcote K ZA mul 1 K sub ZS mul add def
+ /Xabscisse K XA mul 1 K sub XS mul add def
+ /Yordonnee K YA mul 1 K sub YS mul add def
+ CalcCoordinates
+ lineto
+ } for
+ 0 0.01 1 { % k
+ /K exch def
+ /Zcote K ZB mul 1 K sub ZA mul add def
+ /Xabscisse K XB mul 1 K sub XA mul add def
+ /Yordonnee K YB mul 1 K sub YA mul add def
+ CalcCoordinates
+ lineto
+ } for
+ 0 0.01 1 { % k
+ /K exch def
+ /Zcote K ZS mul 1 K sub ZB mul add def
+ /Xabscisse K XS mul 1 K sub XB mul add def
+ /Yordonnee K YS mul 1 K sub YB mul add def
+ CalcCoordinates
+ lineto
+ } for
+} if
+end
+}% fin du code ps
+\end@ClosedObj}\ignorespaces}
+%
+\def\pstFaceSBC{\pst@object{pstFaceSBC}}
+\def\pstFaceSBC@i{{%
+\pst@killglue
+\begin@ClosedObj
+\addto@pscode{%
+\variables@Sphere
+tx@Sphere3DDict begin
+SommetsPyramide
+ PSBC 0 le { %
+reduction reduction scale
+1 setlinejoin
+ /Xabscisse XS def
+ /Yordonnee YS def
+ /Zcote ZS def
+ CalcCoordinates
+ moveto
+0 0.01 1 { % k
+ /K exch def
+ /Zcote K ZB mul 1 K sub ZS mul add def
+ /Xabscisse K XB mul 1 K sub XS mul add def
+ /Yordonnee K YB mul 1 K sub YS mul add def
+ CalcCoordinates
+ lineto
+ } for
+0 0.01 1 { % k
+ /K exch def
+ /Zcote K ZC mul 1 K sub ZB mul add def
+ /Xabscisse K XC mul 1 K sub XB mul add def
+ /Yordonnee K YC mul 1 K sub YB mul add def
+ CalcCoordinates
+ lineto
+ } for
+0 0.01 1 { % k
+ /K exch def
+ /Zcote K ZS mul 1 K sub ZC mul add def
+ /Xabscisse K XS mul 1 K sub XC mul add def
+ /Yordonnee K YS mul 1 K sub YC mul add def
+ CalcCoordinates
+ lineto
+ } for
+} if
+end
+}% fin du code ps
+\end@ClosedObj}\ignorespaces}
+%
+%
+\def\pstFaceSCD{\pst@object{pstFaceSCD}}
+\def\pstFaceSCD@i{{%
+\pst@killglue
+\begin@ClosedObj
+\addto@pscode{%
+\variables@Sphere
+tx@Sphere3DDict begin
+SommetsPyramide
+PSCD 0 le { %
+reduction reduction scale
+1 setlinejoin
+ /Xabscisse XS def
+ /Yordonnee YS def
+ /Zcote ZS def
+ CalcCoordinates
+ moveto
+0 0.01 1 { % k
+ /K exch def
+ /Zcote K ZC mul 1 K sub ZS mul add def
+ /Xabscisse K XC mul 1 K sub XS mul add def
+ /Yordonnee K YC mul 1 K sub YS mul add def
+ CalcCoordinates
+ lineto
+ } for
+0 0.01 1 { % k
+ /K exch def
+ /Zcote K ZD mul 1 K sub ZC mul add def
+ /Xabscisse K XD mul 1 K sub XC mul add def
+ /Yordonnee K YD mul 1 K sub YC mul add def
+ CalcCoordinates
+ lineto
+ } for
+0 0.01 1 { % k
+ /K exch def
+ /Zcote K ZS mul 1 K sub ZD mul add def
+ /Xabscisse K XS mul 1 K sub XD mul add def
+ /Yordonnee K YS mul 1 K sub YD mul add def
+ CalcCoordinates
+ lineto
+ } for
+} if
+end
+}% fin du code ps
+\end@ClosedObj}\ignorespaces}
+%
+\def\pstFaceSDA{\pst@object{pstFaceSDA}}
+\def\pstFaceSDA@i{{%
+\pst@killglue
+\begin@ClosedObj
+\addto@pscode{%
+ \variables@Sphere
+ tx@Sphere3DDict begin
+ SommetsPyramide
+ PSDA 0 le { %
+ reduction reduction scale
+ 1 setlinejoin
+ /Xabscisse XS def
+ /Yordonnee YS def
+ /Zcote ZS def
+ CalcCoordinates
+ moveto
+0 0.01 1 { % k
+ /K exch def
+ /Zcote K ZD mul 1 K sub ZS mul add def
+ /Xabscisse K XD mul 1 K sub XS mul add def
+ /Yordonnee K YD mul 1 K sub YS mul add def
+ CalcCoordinates
+ lineto
+ } for
+0 0.01 1 { % k
+ /K exch def
+ /Zcote K ZA mul 1 K sub ZD mul add def
+ /Xabscisse K XA mul 1 K sub XD mul add def
+ /Yordonnee K YA mul 1 K sub YD mul add def
+ CalcCoordinates
+ lineto
+ } for
+0 0.01 1 { % k
+ /K exch def
+ /Zcote K ZS mul 1 K sub ZA mul add def
+ /Xabscisse K XS mul 1 K sub XA mul add def
+ /Yordonnee K YS mul 1 K sub YA mul add def
+ CalcCoordinates
+ lineto
+ } for
+} if
+end
+}% fin du code ps
+\end@ClosedObj}\ignorespaces}
+%
+\def\pstFaceABCD{\pst@object{pstFaceABCD}}
+\def\pstFaceABCD@i{{%
+\pst@killglue
+\begin@ClosedObj
+\addto@pscode{%
+\variables@Sphere
+tx@Sphere3DDict begin
+SommetsPyramide
+ PSABCD 0 le { %
+reduction reduction scale
+1 setlinejoin
+ /Xabscisse XA def
+ /Yordonnee YA def
+ /Zcote ZA def
+ CalcCoordinates
+ moveto
+0 0.01 1 { % k
+ /K exch def
+ /Zcote K ZB mul 1 K sub ZA mul add def
+ /Xabscisse K XB mul 1 K sub XA mul add def
+ /Yordonnee K YB mul 1 K sub YA mul add def
+ CalcCoordinates
+ lineto
+ } for
+0 0.01 1 { % k
+ /K exch def
+ /Zcote K ZC mul 1 K sub ZB mul add def
+ /Xabscisse K XC mul 1 K sub XB mul add def
+ /Yordonnee K YC mul 1 K sub YB mul add def
+ CalcCoordinates
+ lineto
+ } for
+0 0.01 1 { % k
+ /K exch def
+ /Zcote K ZD mul 1 K sub ZC mul add def
+ /Xabscisse K XD mul 1 K sub XC mul add def
+ /Yordonnee K YD mul 1 K sub YC mul add def
+ CalcCoordinates
+ lineto
+ } for
+0 0.01 1 { % k
+ /K exch def
+ /Zcote K ZA mul 1 K sub ZD mul add def
+ /Xabscisse K XA mul 1 K sub XD mul add def
+ /Yordonnee K YA mul 1 K sub YD mul add def
+ CalcCoordinates
+ lineto
+ } for
+} if
+end
+}% fin du code ps
+\end@ClosedObj}\ignorespaces}
+%
+\def\pstPyramide{\pst@object{pstPyramide}}
+\def\pstPyramide@i{%
+ \begin@SpecialObj
+ \pstFaceSAB[fillcolor=\psk@Sphere@TetraedreColorFaceA]%
+ \pstFaceSBC[fillcolor=\psk@Sphere@TetraedreColorFaceB]%
+ \pstFaceSCD[fillcolor=\psk@Sphere@TetraedreColorFaceC]%
+ \pstFaceSDA[fillcolor=\psk@Sphere@TetraedreColorFaceD]%
+ \pstFaceABCD[fillcolor=\psk@Sphere@TetraedreColorFaceE]%
+ \end@SpecialObj}
+%
+\catcode`\@=\PstAtCode\relax
+%% END: pst-mirror.tex
+\endinput
diff --git a/Master/texmf-dist/tex/latex/pst-mirror/pst-mirror.sty b/Master/texmf-dist/tex/latex/pst-mirror/pst-mirror.sty
new file mode 100644
index 00000000000..ae4c0e5bc47
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/pst-mirror/pst-mirror.sty
@@ -0,0 +1,12 @@
+%% $Id: pst-mirror.sty 168 2009-12-08 17:55:07Z herbert $
+\RequirePackage{pstricks}
+\ProvidesPackage{pst-mirror}[2009/12/08 package wrapper for
+ pst-mirror.tex (hv)]
+\input{pst-mirror.tex}
+\ProvidesFile{pst-mirror.tex}
+ [\filedate\space v\fileversion\space `pst-mirror' (ml,hv)]
+\IfFileExists{pst-mirror.pro}{%
+ \ProvidesFile{pst-mirror.pro}[2009/12/08 v. 1.0, PostScript prologue file]
+ \@addtofilelist{pst-mirror.pro}}{}%
+\endinput
+
diff --git a/Master/tlpkg/bin/tlpkg-ctan-check b/Master/tlpkg/bin/tlpkg-ctan-check
index b344c372cc6..c9e5c5782bd 100755
--- a/Master/tlpkg/bin/tlpkg-ctan-check
+++ b/Master/tlpkg/bin/tlpkg-ctan-check
@@ -212,7 +212,8 @@ my @WorkingTLP = qw(
pst-eps pst-eucl pst-fill
pst-fr3d pst-fractal pst-fun pst-func
pst-gantt pst-geo pst-grad pst-infixplot pst-jtree pst-knot pst-labo
- pst-lens pst-light3d pst-math pst-ob3d pst-optexp pst-optic
+ pst-lens pst-light3d pst-math pst-mirror
+ pst-ob3d pst-optexp pst-optic
pst-osci pst-pad pst-pdf pst-pdgr pst-qtree
pst-sigsys pst-solides3d pst-soroban pst-spectra
pst-slpe pst-stru pst-support pst-text pst-thick pst-tree pst-uml
diff --git a/Master/tlpkg/libexec/ctan2tds b/Master/tlpkg/libexec/ctan2tds
index dbae5da4baa..daa0e011785 100755
--- a/Master/tlpkg/libexec/ctan2tds
+++ b/Master/tlpkg/libexec/ctan2tds
@@ -497,6 +497,7 @@ $Master = "$mydir/../..";
'pst-lens', "&MAKEpst",
'pst-light3d', "&MAKEpst",
'pst-math', "&MAKEpst",
+ 'pst-mirror', "&MAKEpst",
'pst-optexp', "&MAKEpst",
'pst-ob3d', "&MAKEpst",
'pst-optic', "&MAKEpst",
diff --git a/Master/tlpkg/tlpsrc/collection-pstricks.tlpsrc b/Master/tlpkg/tlpsrc/collection-pstricks.tlpsrc
index 98294cfd72e..db860984159 100644
--- a/Master/tlpkg/tlpsrc/collection-pstricks.tlpsrc
+++ b/Master/tlpkg/tlpsrc/collection-pstricks.tlpsrc
@@ -40,6 +40,7 @@ depend pst-labo
depend pst-lens
depend pst-light3d
depend pst-math
+depend pst-mirror
depend pst-ob3d
depend pst-optexp
depend pst-optic
diff --git a/Master/tlpkg/tlpsrc/pst-mirror.tlpsrc b/Master/tlpkg/tlpsrc/pst-mirror.tlpsrc
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/Master/tlpkg/tlpsrc/pst-mirror.tlpsrc