diff options
author | Karl Berry <karl@freefriends.org> | 2009-12-12 01:03:00 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2009-12-12 01:03:00 +0000 |
commit | d69c8e6f02c8ccddda5d0e298d8ef6dd9e3810c0 (patch) | |
tree | 590d7f24265a91a9f2224781aa4bde527837921d /Master/texmf-dist | |
parent | b3d72971aeaf06ea2627c5ebca11fef7d76e0d5b (diff) |
new pstricks package pst-mirror (8dec09)
git-svn-id: svn://tug.org/texlive/trunk@16370 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist')
-rw-r--r-- | Master/texmf-dist/doc/generic/pst-mirror/Changes | 12 | ||||
-rw-r--r-- | Master/texmf-dist/doc/generic/pst-mirror/README | 12 | ||||
-rw-r--r-- | Master/texmf-dist/doc/generic/pst-mirror/pst-mirror-doc.bib | 118 | ||||
-rw-r--r-- | Master/texmf-dist/doc/generic/pst-mirror/pst-mirror-doc.pdf | bin | 0 -> 6332400 bytes | |||
-rw-r--r-- | Master/texmf-dist/doc/generic/pst-mirror/pst-mirror-doc.tex | 1041 | ||||
-rw-r--r-- | Master/texmf-dist/dvips/pst-mirror/pst-mirror.pro | 1081 | ||||
-rw-r--r-- | Master/texmf-dist/source/generic/pst-mirror/Makefile | 69 | ||||
-rw-r--r-- | Master/texmf-dist/tex/generic/pst-mirror/pst-mirror.tex | 1304 | ||||
-rw-r--r-- | Master/texmf-dist/tex/latex/pst-mirror/pst-mirror.sty | 12 |
9 files changed, 3649 insertions, 0 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 Binary files differnew file mode 100644 index 00000000000..ee38b847202 --- /dev/null +++ b/Master/texmf-dist/doc/generic/pst-mirror/pst-mirror-doc.pdf 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 + |