summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/doc/generic/pst-solides3d/doc/par-geode-a.tex
blob: 085049a9e35804901de26e39f0662e00804c0968 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
\section {Les géodes et leurs duales}

\subsection{Présentation mathématique}

D'excellentes études sur les géodes et leurs duales sont disponibles
sur les sites suivants~: 

\centerline{\url{http://fr.wikipedia.org/wiki/G\%C3\%A9ode}}

Le paramétrage d'une géode est fidèle aux indications de la page :

\centerline{\url{http://hypo.ge-dip.etat-ge.ch/www/math/html/amch104.html}}

<< \textit{On peut définir une géode à partir de deux paramètres : un
  numéro $N$ indiquant le type de polyèdre initial ($N = 3$ pour le
  tétraèdre, $N = 4$ pour l'octaèdre et $N = 5$ pour l'icosaèdre) et
  un nombre $n$ indiquant le nombre de divisions le long de l'arête.} 
>>

L'article \textit{Indexing the Sphere with the Hierarchical Triangular Mesh}
décrit une méthode permettant d'obtenir une représentation des géodes :

\centerline{\url{http://research.microsoft.com/research/pubs/view.aspx?msr_tr_id=MSR-TR-2005-123}}

\subsection{Construction avec pst-solides3d}

Deux approches sont possibles pour construire une géode ou sa duale~:
soit \textsl{via\/} \verb+\codejps+, soit en utilisant les objets de
\verb+\psSolid+. 

Pour une géode, les codes 
\begin{verbatim}
\codejps{N n newgeode drawsolid**}
\end{verbatim}
et
\begin{verbatim}
\psSolid[object=geode,ngrid=N n]
\end{verbatim}
sont équivalents. Et pour sa duale, les codes
Pour une géode, les codes 
\begin{verbatim}
\codejps{N n newdualgeode drawsolid**}
\end{verbatim}
et
\begin{verbatim}
\psSolid[object=geode,dualreg,ngrid=N n]
\end{verbatim}
sont équivalents.



\subsection{Quelques exemples de géodes et de duales}

\begin{LTXexample}[pos=t]
\psset{viewpoint=50 -20 30 rtp2xyz,Decran=100}
\begin{pspicture}(-3,-3)(3,3)
\psframe(-3,-3)(3,3)
\psSolid[object=geode,
   ngrid=5 0]
%\codejps{5 0 newgeode drawsolid**}
\psframe*(-2,-2.8)(2,-2.2)
\rput(0,-2.5){\textcolor{white}{\textsf{N=5 n=0}}}
\end{pspicture}
\hfill
\begin{pspicture}(-3,-3)(3,3)
\psframe(-3,-3)(3,3)
\psSolid[object=geode,
   dualreg,
   ngrid=5 0]
%\codejps{5 0 newdualgeode drawsolid**}
\psframe*(-2,-2.8)(2,-2.2)
\rput(0,-2.5){\textcolor{white}{\textsf{N=5 n=0}}}
\end{pspicture}
\end{LTXexample}

\begin{LTXexample}[pos=t]
\psset{viewpoint=50 -20 30 rtp2xyz,Decran=100}
\begin{pspicture}(-3,-3)(3,3)
\psframe(-3,-3)(3,3)
\psSolid[object=geode,
   ngrid=5 1]
%\codejps{5 1 newgeode drawsolid**}
\psframe*(-2,-2.8)(2,-2.2)
\rput(0,-2.5){\textcolor{white}{\textsf{N=5 n=1}}}
\end{pspicture}
\hfill
\begin{pspicture}(-3,-3)(3,3)
\psframe(-3,-3)(3,3)
\psSolid[object=geode,
   dualreg,
   ngrid=5 1]
%\codejps{5 1 newdualgeode drawsolid**}
\psframe*(-2,-2.8)(2,-2.2)
\rput(0,-2.5){\textcolor{white}{\textsf{N=5 n=1}}}
\end{pspicture}
\end{LTXexample}

\subsection{Les paramètres des géodes}

Le rayon de la sphère est fixé à 1, pour augmenter la taille des
géodes on jouera sur l'un ou l'autre des deux paramètres suivants~: 
\begin{itemize}
  \item l'unité : \verb+\psset{unit=2}+
  \item la position de l'écran :
    \verb+viewpoint=50 -20 30,Decran=100+, si la distance de l'écran
    est deux fois plus grande que la distance 
  à laquelle se trouve l'observateur l'échelle de la scène est multipliée par~2.
\end{itemize}

\encadre{En jps, le paramétrages'effectue pour
  la géode dans le \textbackslash{}codejps\{\textbf{N n newgeode}\} et
  pour sa duale dans \textbackslash{}codejps\{\textbf{N n
    newdualgeode}\}.} 

\encadre{Avec \textbackslash{}psSolid, les paramètres $N$ et $n$ sont transmis
via l'argument \texttt{ngrid}} 

Les options de couleurs et de transparence sont bien sûr possibles avec les géodes.

\begin{LTXexample}[pos=t]
\psset{unit=2}
\psset{viewpoint=50 -20 30 rtp2xyz,Decran=100,linewidth=2pt}
\begin{pspicture}(-3,-3)(3,3)
\psframe*(-3,-3)(3,3)
\codejps{
/geode42{4 2 newdualgeode} def
.7 setfillopacity
orange
/geodetransparente{
geode42
dup videsolid
dup (orange) inputcolors
dup [.1 .9] solidputhuecolors} def
geodetransparente
drawsolid**}
\end{pspicture}
\end{LTXexample}

\subsection{Conseils pour la construction `rapide' des géodes}

Le temps de calcul des géodes et de leurs duales dépend du nombre de
divisions sur une arête (le deuxième paramètre $n$) et il devient
rapidement très grand, ce qui est vraiment une gêne lorsqu'on est
obligé d'attendre, plus ou moins patiemment, le résultat de la
transformation \Cadre{dvips->ps2pdf}. 

Comme pour tous les autres solides, il est possible de sauvegarder la
structure calculée dans des fichiers externes, ce qui permettra un
gain de temps appréciable si on doit faire des essais de couleurs ou
de point de vue.

Il faut opérer en deux étapes :

\subsubsection {Sauvegarde en fichier \texttt{.dat} des paramètres de la géode}

\begin{verbatim}
\documentclass{article}
\usepackage{pst-solides3d}
\begin{document}
\codejps{
4 4 newdualgeode
 dup {[.5 .6]} exec solidputhuecolors
(geodedual44) writesolidfile
}
\end{document}
\end{verbatim}
\Cadre{LaTeX->dvips->GSview (Windows)ou gv (Linux)}

Cette dernière opération va créer 4 fichiers  :
\begin{itemize}
  \item \texttt{geodedual44.dat} -> les couleurs des faces ;
  \item \texttt{geodedual44.dat} -> la liste des faces ;
  \item \texttt{geodedual44.dat} -> la liste des sommets ;
  \item \texttt{geodedual44-io.dat} -> le nombre de faces et de sommets.
\end{itemize}

\encadre{Par défaut, sous Windows et Linux, la protection des fichiers
  du disque dur est activée et ne permet donc pas l'écriture sur le
  disque. Pour désactiver cette protection, tout au moins
  temporairement, voici les deux procédures correspondantes : 

\begin{description}

  \item[Linux : ] le conseil de Jean-Michel Sarlat : le plus
simple est donc d'utiliser ghostscript directement, en console. Comme
il n'y a rien à attendre comme image :

\$> gs  -dNOSAFER  lissatest.ps quit.ps
  \item[Windows : ] dans le menu \textsf{Options}, l'option \textsf{Protection des fichiers} ne doit pas être cochée.
\end{description}}

\subsubsection {Lecture des données et dessin de la géode}

%% \begin{LTXexample}[pos=t]
%% \psset{unit=2}
%% \psset{lightsrc=10 0 10,viewpoint=50 -20 30 rtp2xyz,Decran=100}
%% \begin{pspicture}(-2,-2)(2,2)
%% \psframe(-2,-2)(2,2)
%% \psSolid[object=datfile,file=geodedual44]
%% \end{pspicture}
%% \end{LTXexample}

L'avantage de cette méthode vous paraîtra plus évident en faisant la
comparaison suivante : compilation de deux fichiers qui produisant le
même résultat avec les deux méthodes en concurrence. 

Le fichier \texttt{geode42\_direct.tex} fait le calcul du solide et
son affichage. Le fichier \texttt{geode42\_precalcul.tex} utilise les
fichiers \texttt{.dat} de données pré-calculées par
\texttt{calc\_geode42.tex}. 

\subsection{D'autres exemples}

\begin{LTXexample}[pos=t]
\psset{viewpoint=50 -20 30 rtp2xyz,Decran=100}
\begin{pspicture}(-3,-3)(3,3)
\psframe(-3,-3)(3,3)
\psSolid[object=datfile,file=geode51,deactivatecolor]
\psframe*(-2,-2.8)(2,-2.2)
\rput(0,-2.5){\textcolor{white}{\textsf{N=5 n=1}}}
\end{pspicture}
\hfill
\begin{pspicture}(-3,-3)(3,3)
\psframe(-3,-3)(3,3)
\psSolid[object=datfile,file=geodedual51,deactivatecolor]
\psframe*(-2,-2.8)(2,-2.2)
\rput(0,-2.5){\textcolor{white}{\textsf{N=5 n=1}}}
\end{pspicture}
\end{LTXexample}

\begin{LTXexample}[pos=t]
\psset{viewpoint=50 -20 30 rtp2xyz,Decran=100}
\begin{pspicture}(-3,-3)(3,3)
\psframe(-3,-3)(3,3)
\psSolid[object=datfile,file=geode52,deactivatecolor]
\psframe*(-2,-2.8)(2,-2.2)
\rput(0,-2.5){\textcolor{white}{\textsf{N=5 n=2}}}
\end{pspicture}
\hfill
\begin{pspicture}(-3,-3)(3,3)
\psframe(-3,-3)(3,3)
\psSolid[object=datfile,file=geodedual52,deactivatecolor]
\psframe*(-2,-2.8)(2,-2.2)
\rput(0,-2.5){\textcolor{white}{\textsf{N=5 n=2}}}
\end{pspicture}
\end{LTXexample}

\begin{LTXexample}[pos=t]
\psset{viewpoint=50 -20 30 rtp2xyz,Decran=100}
\begin{pspicture}(-3,-3)(3,3)
\psframe(-3,-3)(3,3)
\psSolid[object=datfile,file=geode53,deactivatecolor]
\psframe*(-2,-2.8)(2,-2.2)
\rput(0,-2.5){\textcolor{white}{\textsf{N=5 n=3}}}
\end{pspicture}
\hfill
\begin{pspicture}(-3,-3)(3,3)
\psframe(-3,-3)(3,3)
\psSolid[object=datfile,file=geodedual53,deactivatecolor]
\psframe*(-2,-2.8)(2,-2.2)
\rput(0,-2.5){\textcolor{white}{\textsf{N=5 n=3}}}
\end{pspicture}
\end{LTXexample}