Initialisation du projet pst-solides3d.git (SVN revision 142)
[pst-solides3d.git] / doc / par-geode-a.tex
1 \section {Les géodes et leurs duales}
2
3 \subsection{Présentation mathématique}
4
5 D'excellentes études sur les géodes et leurs duales sont disponibles
6 sur les sites suivants~:
7
8 \centerline{\url{http://fr.wikipedia.org/wiki/G\%C3\%A9ode}}
9
10 Le paramétrage d'une géode est fidèle aux indications de la page :
11
12 \centerline{\url{http://hypo.ge-dip.etat-ge.ch/www/math/html/amch104.html}}
13
14 << \textit{On peut définir une géode à partir de deux paramètres : un
15 numéro $N$ indiquant le type de polyèdre initial ($N = 3$ pour le
16 tétraèdre, $N = 4$ pour l'octaèdre et $N = 5$ pour l'icosaèdre) et
17 un nombre $n$ indiquant le nombre de divisions le long de l'arête.}
18 >>
19
20 L'article \textit{Indexing the Sphere with the Hierarchical Triangular Mesh}
21 décrit une méthode permettant d'obtenir une représentation des géodes :
22
23 \centerline{\url{http://research.microsoft.com/research/pubs/view.aspx?msr_tr_id=MSR-TR-2005-123}}
24
25 \subsection{Construction avec pst-solides3d}
26
27 Deux approches sont possibles pour construire une géode ou sa duale~:
28 soit \textsl{via\/} \verb+\codejps+, soit en utilisant les objets de
29 \verb+\psSolid+.
30
31 Pour une géode, les codes
32 \begin{verbatim}
33 \codejps{N n newgeode drawsolid**}
34 \end{verbatim}
35 et
36 \begin{verbatim}
37 \psSolid[object=geode,ngrid=N n]
38 \end{verbatim}
39 sont équivalents. Et pour sa duale, les codes
40 Pour une géode, les codes
41 \begin{verbatim}
42 \codejps{N n newdualgeode drawsolid**}
43 \end{verbatim}
44 et
45 \begin{verbatim}
46 \psSolid[object=geode,dualreg,ngrid=N n]
47 \end{verbatim}
48 sont équivalents.
49
50
51
52 \subsection{Quelques exemples de géodes et de duales}
53
54 \begin{LTXexample}[pos=t]
55 \psset{viewpoint=50 -20 30 rtp2xyz,Decran=100}
56 \begin{pspicture}(-3,-3)(3,3)
57 \psframe(-3,-3)(3,3)
58 \psSolid[object=geode,
59 ngrid=5 0]
60 %\codejps{5 0 newgeode drawsolid**}
61 \psframe*(-2,-2.8)(2,-2.2)
62 \rput(0,-2.5){\textcolor{white}{\textsf{N=5 n=0}}}
63 \end{pspicture}
64 \hfill
65 \begin{pspicture}(-3,-3)(3,3)
66 \psframe(-3,-3)(3,3)
67 \psSolid[object=geode,
68 dualreg,
69 ngrid=5 0]
70 %\codejps{5 0 newdualgeode drawsolid**}
71 \psframe*(-2,-2.8)(2,-2.2)
72 \rput(0,-2.5){\textcolor{white}{\textsf{N=5 n=0}}}
73 \end{pspicture}
74 \end{LTXexample}
75
76 \begin{LTXexample}[pos=t]
77 \psset{viewpoint=50 -20 30 rtp2xyz,Decran=100}
78 \begin{pspicture}(-3,-3)(3,3)
79 \psframe(-3,-3)(3,3)
80 \psSolid[object=geode,
81 ngrid=5 1]
82 %\codejps{5 1 newgeode drawsolid**}
83 \psframe*(-2,-2.8)(2,-2.2)
84 \rput(0,-2.5){\textcolor{white}{\textsf{N=5 n=1}}}
85 \end{pspicture}
86 \hfill
87 \begin{pspicture}(-3,-3)(3,3)
88 \psframe(-3,-3)(3,3)
89 \psSolid[object=geode,
90 dualreg,
91 ngrid=5 1]
92 %\codejps{5 1 newdualgeode drawsolid**}
93 \psframe*(-2,-2.8)(2,-2.2)
94 \rput(0,-2.5){\textcolor{white}{\textsf{N=5 n=1}}}
95 \end{pspicture}
96 \end{LTXexample}
97
98 \subsection{Les paramètres des géodes}
99
100 Le rayon de la sphère est fixé à 1, pour augmenter la taille des
101 géodes on jouera sur l'un ou l'autre des deux paramètres suivants~:
102 \begin{itemize}
103 \item l'unité : \verb+\psset{unit=2}+
104 \item la position de l'écran :
105 \verb+viewpoint=50 -20 30,Decran=100+, si la distance de l'écran
106 est deux fois plus grande que la distance
107 à laquelle se trouve l'observateur l'échelle de la scène est multipliée par~2.
108 \end{itemize}
109
110 \encadre{En jps, le paramétrages'effectue pour
111 la géode dans le \textbackslash{}codejps\{\textbf{N n newgeode}\} et
112 pour sa duale dans \textbackslash{}codejps\{\textbf{N n
113 newdualgeode}\}.}
114
115 \encadre{Avec \textbackslash{}psSolid, les paramètres $N$ et $n$ sont transmis
116 via l'argument \texttt{ngrid}}
117
118 Les options de couleurs et de transparence sont bien sûr possibles avec les géodes.
119
120 \begin{LTXexample}[pos=t]
121 \psset{unit=2}
122 \psset{viewpoint=50 -20 30 rtp2xyz,Decran=100,linewidth=2pt}
123 \begin{pspicture}(-3,-3)(3,3)
124 \psframe*(-3,-3)(3,3)
125 \codejps{
126 /geode42{4 2 newdualgeode} def
127 .7 setfillopacity
128 orange
129 /geodetransparente{
130 geode42
131 dup videsolid
132 dup (orange) inputcolors
133 dup [.1 .9] solidputhuecolors} def
134 geodetransparente
135 drawsolid**}
136 \end{pspicture}
137 \end{LTXexample}
138
139 \subsection{Conseils pour la construction `rapide' des géodes}
140
141 Le temps de calcul des géodes et de leurs duales dépend du nombre de
142 divisions sur une arête (le deuxième paramètre $n$) et il devient
143 rapidement très grand, ce qui est vraiment une gêne lorsqu'on est
144 obligé d'attendre, plus ou moins patiemment, le résultat de la
145 transformation \Cadre{dvips->ps2pdf}.
146
147 Comme pour tous les autres solides, il est possible de sauvegarder la
148 structure calculée dans des fichiers externes, ce qui permettra un
149 gain de temps appréciable si on doit faire des essais de couleurs ou
150 de point de vue.
151
152 Il faut opérer en deux étapes :
153
154 \subsubsection {Sauvegarde en fichier \texttt{.dat} des paramètres de la géode}
155
156 \begin{verbatim}
157 \documentclass{article}
158 \usepackage{pst-solides3d}
159 \begin{document}
160 \codejps{
161 4 4 newdualgeode
162 dup {[.5 .6]} exec solidputhuecolors
163 (geodedual44) writesolidfile
164 }
165 \end{document}
166 \end{verbatim}
167 \Cadre{LaTeX->dvips->GSview (Windows)ou gv (Linux)}
168
169 Cette dernière opération va créer 4 fichiers :
170 \begin{itemize}
171 \item \texttt{geodedual44.dat} -> les couleurs des faces ;
172 \item \texttt{geodedual44.dat} -> la liste des faces ;
173 \item \texttt{geodedual44.dat} -> la liste des sommets ;
174 \item \texttt{geodedual44-io.dat} -> le nombre de faces et de sommets.
175 \end{itemize}
176
177 \encadre{Par défaut, sous Windows et Linux, la protection des fichiers
178 du disque dur est activée et ne permet donc pas l'écriture sur le
179 disque. Pour désactiver cette protection, tout au moins
180 temporairement, voici les deux procédures correspondantes :
181
182 \begin{description}
183
184 \item[Linux : ] le conseil de Jean-Michel Sarlat : le plus
185 simple est donc d'utiliser ghostscript directement, en console. Comme
186 il n'y a rien à attendre comme image :
187
188 \$> gs -dNOSAFER lissatest.ps quit.ps
189 \item[Windows : ] dans le menu \textsf{Options}, l'option \textsf{Protection des fichiers} ne doit pas être cochée.
190 \end{description}}
191
192 \subsubsection {Lecture des données et dessin de la géode}
193
194 %% \begin{LTXexample}[pos=t]
195 %% \psset{unit=2}
196 %% \psset{lightsrc=10 0 10,viewpoint=50 -20 30 rtp2xyz,Decran=100}
197 %% \begin{pspicture}(-2,-2)(2,2)
198 %% \psframe(-2,-2)(2,2)
199 %% \psSolid[object=datfile,file=geodedual44]
200 %% \end{pspicture}
201 %% \end{LTXexample}
202
203 L'avantage de cette méthode vous paraîtra plus évident en faisant la
204 comparaison suivante : compilation de deux fichiers qui produisant le
205 même résultat avec les deux méthodes en concurrence.
206
207 Le fichier \texttt{geode42\_direct.tex} fait le calcul du solide et
208 son affichage. Le fichier \texttt{geode42\_precalcul.tex} utilise les
209 fichiers \texttt{.dat} de données pré-calculées par
210 \texttt{calc\_geode42.tex}.
211
212 \subsection{D'autres exemples}
213
214 \begin{LTXexample}[pos=t]
215 \psset{viewpoint=50 -20 30 rtp2xyz,Decran=100}
216 \begin{pspicture}(-3,-3)(3,3)
217 \psframe(-3,-3)(3,3)
218 \psSolid[object=datfile,file=geode51,deactivatecolor]
219 \psframe*(-2,-2.8)(2,-2.2)
220 \rput(0,-2.5){\textcolor{white}{\textsf{N=5 n=1}}}
221 \end{pspicture}
222 \hfill
223 \begin{pspicture}(-3,-3)(3,3)
224 \psframe(-3,-3)(3,3)
225 \psSolid[object=datfile,file=geodedual51,deactivatecolor]
226 \psframe*(-2,-2.8)(2,-2.2)
227 \rput(0,-2.5){\textcolor{white}{\textsf{N=5 n=1}}}
228 \end{pspicture}
229 \end{LTXexample}
230
231 \begin{LTXexample}[pos=t]
232 \psset{viewpoint=50 -20 30 rtp2xyz,Decran=100}
233 \begin{pspicture}(-3,-3)(3,3)
234 \psframe(-3,-3)(3,3)
235 \psSolid[object=datfile,file=geode52,deactivatecolor]
236 \psframe*(-2,-2.8)(2,-2.2)
237 \rput(0,-2.5){\textcolor{white}{\textsf{N=5 n=2}}}
238 \end{pspicture}
239 \hfill
240 \begin{pspicture}(-3,-3)(3,3)
241 \psframe(-3,-3)(3,3)
242 \psSolid[object=datfile,file=geodedual52,deactivatecolor]
243 \psframe*(-2,-2.8)(2,-2.2)
244 \rput(0,-2.5){\textcolor{white}{\textsf{N=5 n=2}}}
245 \end{pspicture}
246 \end{LTXexample}
247
248 \begin{LTXexample}[pos=t]
249 \psset{viewpoint=50 -20 30 rtp2xyz,Decran=100}
250 \begin{pspicture}(-3,-3)(3,3)
251 \psframe(-3,-3)(3,3)
252 \psSolid[object=datfile,file=geode53,deactivatecolor]
253 \psframe*(-2,-2.8)(2,-2.2)
254 \rput(0,-2.5){\textcolor{white}{\textsf{N=5 n=3}}}
255 \end{pspicture}
256 \hfill
257 \begin{pspicture}(-3,-3)(3,3)
258 \psframe(-3,-3)(3,3)
259 \psSolid[object=datfile,file=geodedual53,deactivatecolor]
260 \psframe*(-2,-2.8)(2,-2.2)
261 \rput(0,-2.5){\textcolor{white}{\textsf{N=5 n=3}}}
262 \end{pspicture}
263 \end{LTXexample}

Licence Creative Commons Les fichiers de Syracuse sont mis à disposition (sauf mention contraire) selon les termes de la
Licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International.