Initialisation du projet pst-solides3d.git (SVN revision 142)
[pst-solides3d.git] / doc / .svn / text-base / par-new.tex.svn-base
1 \section {Construire à partir du scratch}
2
3 L'objet \verb+new+ permet de construire son propre solide. Deux
4 paramètres sont utilisés~: \verb+sommets+ qui indique la liste des
5 coordonnées des différents sommets, et \verb+faces+ qui donne la liste
6 de toutes les faces du solide, une face de solide étant caractérisée
7 par la liste des indices des sommets la constituant, ceux-ci étant
8 \textbf {rangés dans le sens trigonométrique lorsque l'on regarde la
9 face du coté extérieur}.
10
11 \subsection {Exemple 1 : une maison}
12 \vskip -10mm
13 \begin{multicols}{2}
14 \bgroup
15 \psset{unit=0.5}
16 \psset{lightsrc=10 -20 50,viewpoint=50 -20 30 rtp2xyz,Decran=50}
17 \begin{pspicture*}(-7,-4)(7,7)
18 \psframe(-7,-4)(7,7)
19 \psSolid[object=new,
20     sommets=
21        2  4  3    -2  4  3
22       -2 -4  3     2 -4  3
23        2  4  0    -2  4  0
24       -2 -4  0     2 -4  0
25        0  4  5     0 -4  5,
26     faces={
27       [0 1 2 3]    [7 6 5 4]
28       [0 3 7 4]    [3 9 2]
29       [1 8 0]      [8 9 3 0]
30       [9 8 1 2]    [6 7 3 2]
31       [2 1 5 6]},
32     num=all,
33     show=all,
34     action=draw
35 ]%
36 \end{pspicture*}
37 \egroup
38 \columnbreak
39 \begin{verbatim}
40 \psSolid[object=new,
41     sommets=
42        2  4  3    -2  4  3
43       -2 -4  3     2 -4  3
44        2  4  0    -2  4  0
45       -2 -4  0     2 -4  0
46        0  4  5     0 -4  5,
47     faces={
48       [0 1 2 3]    [7 6 5 4]
49       [0 3 7 4]    [3 9 2]
50       [1 8 0]      [8 9 3 0]
51       [9 8 1 2]    [6 7 3 2]
52       [2 1 5 6]},
53     num=all,show=all,action=draw]
54 \end{verbatim}
55 \end{multicols}
56
57 Il est à remarquer que le solide \verb+new+ accepte les mêmes options
58 que les autres solides. Par exemple, on a représenté ci-dessous le
59 solide précédent en utilisant les paramètres \verb+hollow+,
60 \verb+incolor+, \verb+fillcolor+ et \verb+rm+.
61
62 %% exemple 2
63
64 \begin{multicols}{2}
65
66 \bgroup
67 \psset{unit=0.5}
68 \psset{lightsrc=10 -20 50,viewpoint=50 -20 30 rtp2xyz,Decran=50}
69 \begin{pspicture*}(-7,-3.5)(7,7.5)
70 \psframe(-7,-3.5)(7,7.5)
71 \psSolid[object=new,fillcolor=red!50,incolor=yellow,
72     action=draw**,
73     hollow,
74     rm=2,
75     sommets=
76        2  4  3
77       -2  4  3
78       -2 -4  3
79        2 -4  3
80        2  4  0
81       -2  4  0
82       -2 -4  0
83        2 -4  0
84        0  4  5
85        0 -4  5,
86     faces={
87       [0 1 2 3]
88       [7 6 5 4]
89       [0 3 7 4]
90       [3 9 2]
91       [1 8 0]
92       [8 9 3 0]
93       [9 8 1 2]
94       [6 7 3 2]
95       [2 1 5 6]},
96     num=all,
97     show=all
98       ]%
99 \end{pspicture*}
100 \egroup
101
102 \columnbreak
103
104 \begin{verbatim}
105 \psSolid[object=new,fillcolor=red!50,
106     incolor=yellow,
107     action=draw**,
108     hollow,
109     rm=2,
110     ...
111 \end{verbatim}
112 \end{multicols}
113
114 \subsection {Exemple 2 : Hyperboloïde de rayon fixe}
115
116 %\psset{lightsrc=10 20 30,viewpoint=50 20 30 rtp2xyz}
117 %\psset{viewpoint=50 20 30 rtp2xyz}
118
119 \begin{multicols}{2}
120
121 Comme à chaque fois, les options de la macro \verb+\psSolid+ peuvent
122 embarquer du code postscript, voire du code jps.
123
124 Ci-contre un exemple en pur postscript, où on utilise les variables
125 $a$, $b$ et $h$ qui sont transmises par les options de PSTricks. On
126 obtient ainsi un solide variable construit à partir du scratch.
127
128 Remarque~: le code utilisé provient d'un source jps pratiquement
129 utilisé tel que~: 
130
131 \noindent\url{http://melusine.eu.org/lab/bjps/solide/tour.jps}
132
133 \columnbreak
134
135 \bgroup
136 \psset{unit=0.75}
137 \psset{lightsrc=10 -20 20,viewpoint=50 -20 30 rtp2xyz,Decran=50}
138 \begin{pspicture*}(-5,-5)(3,5)
139 \psframe(-3,-5)(3,5)
140 \psSolid[object=new,fillcolor=red!50,incolor=yellow,
141     hollow,
142     a=10, %% nb d'etages
143     b=20, %% diviseur de 360, nb de meridiens
144     h=8,  %% hauteur
145     action=draw**,
146     sommets=
147       /z0 h neg 2 div def
148       a -1 0 {
149          /k exch def
150          0 1 b 1 sub {
151              /i exch def
152              /r z0 h a div k mul add dup mul 4 div 1 add sqrt def
153              360 b idiv i mul cos r mul
154              360 b idiv i mul sin r mul
155              z0 h a div k mul add
156          } for
157       } for,
158     faces={
159       0 1 a 1 sub {
160       /k exch def
161          k b mul 1 add 1 k 1 add b mul 1 sub {
162              /i exch def
163              [i i 1 sub b i add 1 sub b i add]
164          } for
165          [k b mul k 1 add b mul 1 sub k 2 add b mul 1 sub k 1 add b mul]
166       } for
167     },
168 ]
169 \end{pspicture*}
170 \egroup
171
172 \end{multicols}
173
174 Le code utilisé est le suivant~:
175 \begin{verbatim}
176 \psSolid[object=new,fillcolor=red!50,incolor=yellow,
177     hollow,
178     a=10, %% nb d'etages
179     b=20, %% diviseur de 360, nb de meridiens
180     h=8,  %% hauteur
181     action=draw**,
182     sommets=
183       /z0 h neg 2 div def
184       a -1 0 {
185          /k exch def
186          0 1 b 1 sub {
187              /i exch def
188              /r z0 h a div k mul add dup mul 4 div 1 add sqrt def
189              360 b idiv i mul cos r mul
190              360 b idiv i mul sin r mul
191              z0 h a div k mul add
192          } for
193       } for,
194     faces={
195       0 1 a 1 sub {
196       /k exch def
197          k b mul 1 add 1 k 1 add b mul 1 sub {
198              /i exch def
199              [i i 1 sub b i add 1 sub b i add]
200          } for
201          [k b mul k 1 add b mul 1 sub k 2 add b mul 1 sub k 1 add b mul]
202       } for
203     }]
204 \end{verbatim}
205
206 \subsection {Exemple 3~: Import de fichiers externes}
207
208 \`A partir d'un fichier de description de solide dans un format
209 particulier (notamment autre que obj ou off), on peut fabriquer
210 soit-même  un fichier .dat contenant les coordonnées des sommets, et
211 un autre fichier .dat contenant les tableaux des indices des sommets
212 de chaque facette. Ces fichiers peuvent alors être utilisés en entrée
213 pour les paramètres \verb+sommets+ et \verb+faces+ en utilisant
214 l'instruction postscript \verb+run+.
215
216 Dans l'exemple ci-dessous, les fichiers \verb+sommets_nefer.dat+
217 et \verb+faces_nefer.dat+ ont été placés dans le répertoire de
218 compilation. 
219
220 \medbreak
221 \bgroup
222 \psset{unit=0.4}
223 \definecolor{AntiqueWhite}{rgb}{0.98,0.92,0.84}
224 \begin{pspicture}(-7,-7)(7,8)
225 \psset{lightsrc=30 -40 10}
226 \psset{viewpoint=50 -50 20 rtp2xyz,Decran=50}
227 \psframe(-7,-7)(7,8)
228 \psset{RotX=90,sommets= (sommets_nefer.dat) run}
229 \psSolid[object=new,fillcolor=AntiqueWhite,linewidth=0.5\pslinewidth,
230     faces={(faces_nefer.dat) run}]%
231 \psSolid[object=new,fillcolor=red,linewidth=0.5\pslinewidth,
232     faces={(faces_nefer_levres.dat) run}]%
233 \psSolid[object=new,fillcolor=black,
234     faces={(faces_nefer_sourcils.dat) run}]%
235 \end{pspicture}
236 \hfill
237 \begin{pspicture}(-7,-7)(7,8)
238 \psset{lightsrc=-10 -40 -5,lightintensity=.5}
239 \psset{viewpoint=50 -80 10 rtp2xyz,Decran=50}
240 \psframe(-7,-7)(7,8)
241 \psset{RotX=90,RotZ=30,sommets= (sommets_nefer.dat) run}
242 \psSolid[object=new,fillcolor=AntiqueWhite,linewidth=0.5\pslinewidth,
243     grid,
244     faces={(faces_nefer.dat) run}]%
245 \psSolid[object=new,fillcolor=red,linewidth=0.5\pslinewidth,grid,
246     faces={(faces_nefer_levres.dat) run}]%
247 \psSolid[object=new,fillcolor=black,
248     faces={(faces_nefer_sourcils.dat) run}]%
249 \end{pspicture}
250 \egroup
251
252 \newpage
253 \begin{verbatim}
254 \definecolor{AntiqueWhite}{rgb}{0.98,0.92,0.84}
255 \psset{lightsrc=30 -40 10}
256 \psset{viewpoint=50 -50 20 rtp2xyz,Decran=50}
257 \psframe(-7,-7)(7,9)
258 \psSolid[object=new,RotX=90,fillcolor=AntiqueWhite,linewidth=0.5\pslinewidth,
259     sommets= (sommets_nefer.dat) run,
260     faces={(faces_nefer.dat) run}]%
261 \end{verbatim}

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.