Initialisation du projet pst-solides3d.git (SVN revision 142)
[pst-solides3d.git] / doc / par-section.tex
1 \section {Sectionner un solide par un plan}
2
3 \subsection{Tracer l'intersection d'un plan et d'un solide}
4
5 \subsubsection{Les paramètres}
6
7 C'est l'option \Cadre{intersectionplan=\{[a b c d]\}} qui permet de
8 tracer l'intersection d'un plan et d'un solide. L'argument entre les
9 crochets contient les paramètres du plan affine ayant pour équation :
10 $ax+by+cz+d=0$. Il est possible de dessiner l'intersection du solide
11 avec plusieurs plans en plaçant à la suite les paramètres de ces plans
12 comme dans l'exemple suivant.
13
14 Le tracé est activé avec \Cadre{intersectiontype=0} ou toute autre valeur $\geq0$.
15
16 La couleur du tracé est choisie dans l'option
17 \Cadre{intersectioncolor=(bleu) (rouge) etc.}. On donne successivement
18 dans l'ordre, l'épaisseur de chaque tracé par
19 \Cadre{intersectionlinewidth=1 2 etc.} (dimensions en picas).
20
21 Le tracé en traits discontinus des parties cachées sera activé avec \Cadre{action=draw}.
22
23 \begin{LTXexample}[width=6cm]
24 \begin{pspicture}(-3,-2)(3,7)
25 \psset{lightsrc=viewpoint,viewpoint=50 20 20 rtp2xyz,Decran=50}
26 \psset{lightsrc=viewpoint}
27 \psSolid[object=cylindre,
28 ngrid=1 24,
29 r=2,
30 fillcolor=yellow!25,
31 intersectiontype=0,
32 intersectionplan={
33 [0 0 1 -1]
34 [0 0 1 -2]
35 [0 0 1 -3]
36 [0.894 0 0.447 -1.8]},
37 intersectioncolor=(bleu) (rouge) (vert) (rose),
38 intersectionlinewidth=1 1.5 1.8 2.2]
39 \axesIIID(2,2,6)(3,3,7)
40 \end{pspicture}
41 \end{LTXexample}
42 \subsection{Coupes d'un solide}
43 \subsubsection{Coupe du solide plein}
44 L'objet étudié est un cylindre.
45 Le plan qui coupe l'objet sera défini par :
46 \begin{gbar}
47 \begin{verbatim}
48 plansepare={[a b c d]}
49 \end{verbatim}
50 \end{gbar}
51 Les deux parties ne seront pas tracées mais mises en mémoire avec le nom commun \Cadre{name=partiescylindre} :
52 \begin{gbar}
53 \begin{verbatim}
54 \psset{solidmemory}
55 \psSolid[object=cylindre,
56 r=2,h=6
57 ngrid=6 24,
58 plansepare={[0.707 0 0.707 0]},
59 name=partiescylindre,
60 action=none](0,0,-3)
61 \end{verbatim}
62 \end{gbar}
63 Puis affichées séparément avec leur indice respectif. C'est le sens de la normale du plan de séparation qui détermine le numérotage des deux parties : \Cadre{0} celle qui est \textit{au-dessus} de la normale et \Cadre{1} celle qui est \textit{au-dessous}. Pour les deux parties, la face de découpe porte le numéro \Cadre{0}.
64 S'il y a plusieurs faces de découpe, comme dans le cas du tore elles sont numérotées \Cadre{0, 1 etc.}
65 \begin{gbar}
66 \begin{verbatim}
67 \psSolid[object=load,
68 load=partiescylindre1,
69 fillcolor={[rgb]{0.7 1 0.7 }},
70 fcol=0 (1 1 0.7 setrgbcolor)]
71 \psSolid[object=load,
72 load=partiescylindre0,RotZ=60,
73 fillcolor={[rgb]{0.7 1 0.7 }},
74 fcol=0 (1 1 0.7 setrgbcolor)](0,4,0)
75 \end{verbatim}
76 \end{gbar}
77 \begin{center}
78 \begin{pspicture}(-4,-5)(7,4)
79 \psframe(-4,-5)(7,4)
80 \psset{viewpoint=50 -40 10 rtp2xyz,Decran=50,linecolor=darkgray}
81 %\lightsource
82 \psset{lightsrc=viewpoint}
83 \psSolid[object=grille,action=draw,
84 base=-3 5 -3 5,
85 linecolor=red](0,0,-3)
86 \psset{solidmemory}
87 \psSolid[object=cylindre,
88 r=2,h=6,
89 ngrid=6 24,
90 plansepare={[0.707 0 0.707 0]},
91 name=partiescylindre,
92 action=none](0,0,-3)
93 \psSolid[object=load,
94 load=partiescylindre1,
95 fillcolor={[rgb]{0.7 1 0.7 }},
96 fcol=0 (1 1 0.7 setrgbcolor)]
97 \psSolid[object=load,
98 load=partiescylindre0,RotZ=90,
99 fillcolor={[rgb]{0.7 1 0.7 }},
100 fcol=0 (1 1 0.7 setrgbcolor)](0,4,0)
101 \psSolid[object=plan,action=draw,
102 definition=equation,
103 args={[0.707 0 0.707 0] 90},
104 base=-2 2 -3 3,planmarks,showBase]
105 \axesIIID(0,0,0)(2.5,2.5,3.5)
106 \end{pspicture}
107 \end{center}
108
109 \subsubsection{Coupe du solide creux}
110 Les options \Cadre{rm=0,hollow} permettent, l'une d'enlever la face de
111 découpe \Cadre{rm=0} et l'autre, \Cadre{hollow} de voir l'intérieur.
112 \begin{center}
113 \begin{pspicture}(-4,-5)(7,4)
114 \psframe(-4,-5)(7,4)
115 \psset{viewpoint=50 -40 10 rtp2xyz,Decran=50,linecolor=darkgray}
116 %\lightsource
117 \psset{lightsrc=viewpoint}
118 \psSolid[object=grille,action=draw,
119 base=-3 5 -3 5,
120 linecolor=red](0,0,-3)
121 \psset{solidmemory}
122 \psSolid[object=cylindre,
123 r=2,h=6,
124 ngrid=6 24,
125 plansepare={[0.707 0 0.707 0.5]},
126 name=partiescylindre,
127 action=none](0,0,-3)
128 \psSolid[object=load,
129 load=partiescylindre1,
130 fillcolor={[rgb]{0.7 1 0.7 }},
131 rm=0,hollow,
132 incolor={[rgb]{1 1 0.7}}]
133 \psSolid[object=load,
134 load=partiescylindre0,RotZ=90,
135 fillcolor={[rgb]{0.7 1 0.7 }},
136 rm=0,hollow,
137 incolor={[rgb]{1 1 0.7}}](0,4,0)
138 \psSolid[object=plan,action=draw,
139 definition=equation,
140 args={[0.707 0 0.707 0.5] 90},
141 base=-2 2 -3 3,planmarks,showBase]
142 \composeSolid
143 \end{pspicture}
144 \end{center}
145
146
147 \subsection{Tranche d'une pyramide}
148
149 \subsubsection{Marquage des lignes de niveau et première découpe}
150
151 Cette pyramide est créée comme un \Cadre{object=new} en donnant le
152 liste des coordonnées des sommets et des faces.
153 \begin{gbar}
154 \begin{verbatim}
155 sommets=
156 0 -2 0 %% 0
157 -2 0 0 %% 1
158 0 4 0 %% 2
159 4 0 0 %% 3
160 0 0 5, %% 4
161 faces={
162 [3 2 1 0]
163 [4 0 3]
164 [4 3 2]
165 [4 2 1]
166 }
167 \end{verbatim}
168 \end{gbar}
169 Dans une première étape, facultative, on marque les lignes de découpe.
170 \begin{gbar}
171 \begin{verbatim}
172 intersectiontype=0,
173 intersectionplan={[0 0 1 -1] [0 0 1 -2]},
174 intersectionlinewidth=1 2,
175 intersectioncolor=(bleu) (rouge)
176 \end{verbatim}
177 \end{gbar}
178 Et on coupe la pointe supérieure, en dessinant aussi le plan de coupe.
179 \begin{gbar}
180 \begin{verbatim}
181 \psSolid[object=new,
182 sommets=
183 0 -2 0 %% 0
184 -2 0 0 %% 1
185 0 4 0 %% 2
186 4 0 0 %% 3
187 0 0 5, %% 4
188 faces={
189 [3 2 1 0]
190 [4 0 3]
191 [4 3 2]
192 [4 2 1]
193 [4 1 0]},
194 plansepare={[0 0 1 -2]},
195 name=firstSlice,
196 action=none]
197 \psSolid[object=load,action=draw*,
198 load=firstSlice1]
199 \psSolid[object=plan,
200 definition=equation,
201 args={[0 0 1 -2]},
202 base=-3 5 -3 5,action=draw]
203 \end{verbatim}
204 \end{gbar}
205 Pour ne pas avoir à chaque fois à réécrire sommets et faces de la pyramide, on enregistre ses données dans les fichiers :
206 \begin{itemize}
207 \item Pyramid-couleurs.dat
208 \item Pyramid-faces.dat
209 \item Pyramid-sommets.dat
210 \item Pyramid-io.dat
211 \end{itemize}
212 grâce à la commande \Cadre{action=writesolid} :
213 \begin{gbar}
214 \begin{verbatim}
215 \psSolid[object=new,
216 sommets=
217 0 -2 0 %% 0
218 -2 0 0 %% 1
219 0 4 0 %% 2
220 4 0 0 %% 3
221 0 0 5, %% 4
222 faces={
223 [3 2 1 0]
224 [4 0 3]
225 [4 3 2]
226 [4 2 1]
227 [4 1 0]
228 },file=Pyramid,fillcolor=yellow!50,
229 action=writesolid]
230 \end{verbatim}
231 \end{gbar}
232 Toutes ces lignes pourront alors être supprimées et par la suite, on
233 appellera ces données avec la commande :
234 \begin{gbar}
235 \begin{verbatim}
236 \psSolid[object=datfile,
237 file=Pyramid]
238 \end{verbatim}
239 \end{gbar}
240 \begin{center}
241 \psset{unit=0.75}
242 \begin{pspicture}(-5,-2)(5,7)
243 \psframe(-5,-2)(5,7)
244 \psset{viewpoint=50 20 10 rtp2xyz,Decran=50}
245 %\lightsource
246 \psset{lightsrc=viewpoint}
247 \psSolid[object=grille,
248 base=-3 5 -3 5,
249 linecolor=gray]
250 %% create the pyramid with base area in xy-plane
251 \psSolid[object=new,
252 sommets=
253 0 -2 0 %% 0
254 -2 0 0 %% 1
255 0 4 0 %% 2
256 4 0 0 %% 3
257 0 0 5, %% 4
258 faces={
259 [3 2 1 0]
260 [4 0 3]
261 [4 3 2]
262 [4 2 1]
263 [4 1 0]
264 }, action=draw*,
265 intersectiontype=0,
266 intersectionplan={[0 0 1 -1]
267 [0 0 1 -2]},
268 intersectionlinewidth=1 2,
269 intersectioncolor=(bleu) (rouge)]
270 \axesIIID[linecolor=blue](4,4,5)(5,5,6)
271 \end{pspicture}
272 \hfill
273 \begin{pspicture}(-5,-2)(5,7)
274 \psframe(-5,-2)(5,7)
275 \psset{viewpoint=50 20 10 rtp2xyz,Decran=50}
276 %\lightsource
277 \psset{lightsrc=viewpoint}
278 \psSolid[object=grille,
279 base=-3 5 -3 5,
280 linecolor=gray]
281 \psset{solidmemory}
282 %% create the pyramid with base area in xy-plane
283 \psSolid[object=new,
284 sommets=
285 0 -2 0 %% 0
286 -2 0 0 %% 1
287 0 4 0 %% 2
288 4 0 0 %% 3
289 0 0 5, %% 4
290 faces={
291 [3 2 1 0]
292 [4 0 3]
293 [4 3 2]
294 [4 2 1]
295 [4 1 0]
296 },
297 plansepare={[0 0 1 -2]},
298 name=firstSlice,
299 action=none]
300 \psSolid[object=load,action=draw*,
301 load=firstSlice1]
302 \psSolid[object=plan,
303 definition=equation,
304 args={[0 0 1 -2]},
305 base=-3 5 -3 5,action=draw]
306 \axesIIID[linecolor=blue](4,4,2)(5,5,6)
307 \end{pspicture}
308 \end{center}
309
310 \subsubsection{Deuxième découpe et son insertion dans la pyramide}
311 Après avoir ôté la partie supérieure \Cadre{firstSlice0} (elle n'apparaît
312 plus), on découpe dans la partie restante, nommée \Cadre{firstSlice1}, la
313 base de la pyramide en gardant le haut \Cadre{secondSlice0}, puis on
314 enregistre la tranche de pyramide restante afin de l'insérer dans la
315 pyramide en fil de fer~:
316 \begin{gbar}
317 \begin{verbatim}
318 \psset{solidmemory}
319 \psSolid[object=datfile,
320 file=Pyramid,
321 plansepare={[0 0 1 -2]},
322 name=firstSlice,
323 action=none]
324 \psSolid[object=load,
325 load=firstSlice1,
326 action=none,
327 plansepare={[0 0 1 -1]},
328 name=secondSlice]
329 \psSolid[object=load,action=draw*,
330 load=secondSlice0]
331 \psSolid[object=load,
332 load=secondSlice0,
333 file=slicePyramid,
334 action=writesolid]
335 \psSolid[object=datfile,fillcolor=yellow!50,
336 file=slicePyramid]
337 \end{verbatim}
338 \end{gbar}
339
340 \begin{center}
341 \psset{unit=0.75}
342 \begin{pspicture}(-5,-2)(4,7)
343 %\psframe(-4,-2)(4,7)
344 \psset{viewpoint=50 20 10 rtp2xyz,Decran=50}
345 %\lightsource
346 \psset{lightsrc=viewpoint}
347 \psSolid[object=grille,
348 base=-3 5 -3 5,
349 linecolor=gray]
350 \psset{solidmemory}
351 %% create the pyramid with base area in xy-plane
352 %\psSolid[object=new,
353 % sommets=
354 % 0 -2 0 %% 0
355 % -2 0 0 %% 1
356 % 0 4 0 %% 2
357 % 4 0 0 %% 3
358 % 0 0 5, %% 4
359 % faces={
360 % [3 2 1 0]
361 % [4 0 3]
362 % [4 3 2]
363 % [4 2 1]
364 % [4 1 0]
365 %},file=Pyramid,fillcolor=yellow!50,
366 % action=writesolid]
367 \psSolid[object=datfile,
368 file=Pyramid,
369 plansepare={[0 0 1 -2]},
370 name=firstSlice,
371 action=none]
372 \psSolid[object=plan,
373 definition=equation,
374 args={[0 0 1 -1]},action=draw,
375 base=-3 5 -3 5]
376 \psSolid[object=load,
377 load=firstSlice1,
378 action=none,
379 plansepare={[0 0 1 -1]},
380 name=secondSlice]
381 %\psSolid[object=load,action=draw*,
382 % load=secondSlice0]
383 %\psSolid[object=load,
384 % load=secondSlice0,
385 % file=slicePyramid,
386 % action=writesolid]
387 \psSolid[object=datfile,fillcolor=yellow!50,
388 file=slicePyramid]
389 \psSolid[object=plan,
390 definition=equation,
391 args={[0 0 1 -2]},
392 base=-3 5 -3 5,action=draw]
393 \axesIIID[linecolor=blue](0,0,2)(5,5,6)
394 \end{pspicture}
395 \hfill
396 \begin{pspicture}(-4,-2)(6,7)
397 \psset{viewpoint=50 20 10 rtp2xyz,Decran=50}
398 %\lightsource
399 \psset{lightsrc=viewpoint}
400 \psSolid[object=grille,
401 base=-3 5 -3 5,
402 linecolor=gray]
403 \psSolid[object=datfile,fillcolor=yellow!50,
404 file=slicePyramid]
405 \psSolid[object=datfile,
406 file=Pyramid,action=draw]
407 \axesIIID[linecolor=blue](4,4,2)(5,5,6)
408 \end{pspicture}
409 \end{center}
410
411 \subsection{Coupe d'un octaèdre par un plan parallèle à l'une des faces}
412
413 \subsubsection{Voir l'intérieur}
414 Rappelons que ce sont les options \Cadre{rm=0,hollow} qui permettent,
415 l'une d'enlever la face de découpe \Cadre{rm=0} et l'autre
416 \Cadre{hollow} de voir l'intérieur.
417
418 Dans l'exemple ci-dessous, on commence par construire les objets
419 nécessaires, sans les dessiner (\verb+action=none+).
420
421 On construit l'octaèdre, on nomme $G$ le centre de la face d'indice
422 $1$, puis on définit le point $H$ vérifiant $\overrightarrow{OH} =
423 0,8\overrightarrow {OG}$. On définit ensuite le plan $P$ passant par
424 $H$ et parallèle à la face d'indice $1$ de l'octaèdre. On pratique
425 ensuite la séparation de l'octaèdre par le plan $P$.
426
427 \begin{LTXexample}[width=7.5cm]
428 \begin{pspicture}(-3.5,-3)(4.5,5)
429 \psset{viewpoint=100 5 10 rtp2xyz,Decran=80,
430 lightsrc=viewpoint,solidmemory,action=none}
431 \psSolid[object=octahedron,
432 a=4,name=my_octahedron,]
433 \psSolid[object=point,
434 definition=solidcentreface,
435 args=my_octahedron 1,
436 name=G,]
437 \psSolid[object=point,
438 definition=mulv3d,
439 args=G .8,
440 name=H,]
441 \psSolid[object=plan,
442 definition=solidface,
443 args=my_octahedron 1,
444 base=-4 4 -4 4,
445 name=P,](H,,)
446 \psSolid[object=load,
447 load=my_octahedron,
448 plansepare=P,
449 name=part]
450 \psSolid[object=load,load=part1,
451 rm=0,hollow,action=draw**,
452 fillcolor={[rgb]{0.7 1 0.7}},
453 incolor={[rgb]{1 1 0.7}},]
454 \psSolid[object=plan,args=P,
455 action=draw,showBase]
456 \psSolid[object=line,
457 args=0 0 0 H,
458 linestyle=dashed,]
459 \psProjection[object=point,plan=P,args=0 0,
460 fontsize=20,pos=cl,text=H,phi=90,]
461 \axesIIID[linecolor=blue,linewidth=0.4pt](0,0,0)(4,4,4)
462 \end{pspicture}
463 \end{LTXexample}
464
465 \subsubsection{On considère le solide comme plein}
466
467 L'option \Cadre{fcol=0 (YellowOrange)} permet de colorier la face de
468 découpe qui est la face \Cadre{0}.
469
470 \begin{LTXexample}[width=7.5cm]
471 \begin{pspicture}(-3.5,-3)(4.5,5)
472 \psset{viewpoint=100 5 10 rtp2xyz,Decran=80,
473 lightsrc=viewpoint,solidmemory,action=none}
474 \psSolid[object=octahedron,
475 a=4,name=my_octahedron,]
476 \psSolid[object=point,
477 definition=solidcentreface,
478 args=my_octahedron 1,
479 name=G,]
480 \psSolid[object=point,
481 definition=mulv3d,
482 args=G .8,
483 name=H,]
484 \psSolid[object=plan,
485 definition=solidface,
486 args=my_octahedron 1,
487 base=-4 4 -4 4,
488 name=P,](H,,)
489 \psSolid[object=load,
490 load=my_octahedron,
491 plansepare=P,
492 name=part]
493 \psSolid[object=load,
494 load=part1,
495 fcol=0 (YellowOrange),
496 action=draw**,
497 fillcolor={[rgb]{0.7 1 0.7}},]
498 \psSolid[object=plan,args=P,
499 action=draw,showBase]
500 \psSolid[object=line,
501 args=0 0 0 H,
502 linestyle=dashed,]
503 \psProjection[object=point,plan=P,args=0 0,
504 fontsize=20,pos=cl,text=H,phi=90,]
505 \axesIIID[linecolor=blue,linewidth=0.4pt](0,0,0)(4,4,4)
506 \end{pspicture}
507 \end{LTXexample}
508
509 \subsubsection{Les deux parties du solide découpé}
510
511 On rappelle que c'est le sens de la normale du plan de séparation qui
512 détermine le numérotage des deux parties : \Cadre{0} celle qui est
513 \textit{au-dessus} de la normale et \Cadre{1} celle qui est
514 \textit{au-dessous}. Pour les deux parties, la face de découpe porte
515 le numéro \Cadre{0}.
516 S'il y a plusieurs faces de découpe, comme dans le cas du tore elles
517 sont numérotées \Cadre{0, 1 etc.}
518
519 On opère en deux étapes, mise en mémoire des deux parties du solide découpé :
520 \begin{gbar}
521 \begin{verbatim}
522 \psSolid[object=load,
523 load=my_octahedron,
524 plansepare=P,
525 name=part]
526 \end{verbatim}
527 \end{gbar}
528 Puis placement et traitement de chacune des parties :
529 \begin{gbar}
530 \begin{verbatim}
531 \psSolid[object=load,
532 fcol=0 (YellowOrange),
533 fillcolor={[rgb]{0.7 1 0.7}},
534 load=part1]
535 \psSolid[object=load,
536 fillcolor={[rgb]{0.7 1 0.7}},
537 load=part0](H 2 mulv3d,,)
538 \composeSolid
539 \end{verbatim}
540 \end{gbar}
541
542 \begin{LTXexample}[width=7.5cm]
543 \begin{pspicture}(-3.5,-3)(4.5,5)
544 \psset{viewpoint=100 5 20 rtp2xyz,Decran=150,
545 lightsrc=viewpoint,solidmemory,action=none}
546 \psSolid[object=octahedron,
547 a=2,name=my_octahedron,]
548 \psSolid[object=point,
549 definition=solidcentreface,
550 args=my_octahedron 1,
551 name=G,]
552 \psSolid[object=point,
553 definition=mulv3d,
554 args=G .7,
555 name=H,]
556 \psSolid[object=plan,
557 definition=solidface,
558 args=my_octahedron 1,
559 base=-4 4 -4 4,
560 name=P,](H,,)
561 \psSolid[object=load,
562 load=my_octahedron,
563 plansepare=P,
564 name=part]
565 \psset{action=draw**}
566 \psSolid[object=load,
567 load=part1,
568 fcol=0 (YellowOrange),
569 fillcolor={[rgb]{0.7 1 0.7}},]
570 \psSolid[object=load,
571 fillcolor={[rgb]{0.7 1 0.7}},
572 load=part0](H 2 mulv3d,,)
573 \composeSolid
574 \end{pspicture}
575 \end{LTXexample}
576
577 \subsection{Coupes d'un cube}
578
579 \subsubsection{Marquage de la ligne de découpage}
580
581 \begin{LTXexample}[width=8cm]
582 \psset{viewpoint=100 30 20 rtp2xyz,Decran=150}
583 \begin{pspicture}(-4,-3)(4,5)
584 \psframe(-4,-3)(4,5)
585 \psset{solidmemory}
586 \psSolid[object=plan,definition=normalpoint,
587 args={1 1 1 [1 1 1]},action=none,name=P]
588 \psSolid[object=cube,a=2,action=draw,
589 intersectiontype=0,
590 intersectionplan=P,
591 intersectionlinewidth=2,
592 intersectioncolor=(rouge),
593 ](1,1,1)
594 \psProjection[object=point,
595 args=0 0,fontsize=10,pos=dc,
596 text=H,phi=-30,plan=P,
597 ]
598 \psSolid[object=line,
599 linestyle=dashed,
600 args=0 0 0 1 1 1]
601 \psSolid[object=vecteur,
602 linecolor=red,
603 args=1 1 1 .7 mulv3d](1,1,1)
604 \axesIIID[linecolor=blue](2,2,2)(2.5,2.5,2.5)
605 \end{pspicture}
606 \end{LTXexample}
607
608 \subsubsection{Représentation du cube découpé avec une face de découpe hexagonale}
609
610 \begin{LTXexample}[width=8cm]
611 \psset{viewpoint=100 30 20 rtp2xyz,Decran=150}
612 \begin{pspicture}(-4,-3)(4,5)
613 \psframe(-4,-3)(4,5)
614 \psset{solidmemory}
615 \psSolid[object=plan,action=none,definition=normalpoint,
616 args={1 1 1 [1 1 1]},name=P]
617 \psSolid[object=cube,a=2,
618 plansepare=P,
619 action=none,
620 name=parts_cube,
621 ](1,1,1)
622 \psSolid[object=load,
623 load=parts_cube1,
624 fcol=0 (Dandelion),
625 fillcolor={[rgb]{0.7 1 0.7}},
626 ]
627 \psProjection[object=point,
628 args=0 0,fontsize=10,pos=dc,
629 text=H,phi=-30,plan=P,
630 ]
631 \psSolid[object=vecteur,
632 linecolor=red,
633 args=1 1 1 .7 mulv3d](1,1,1)
634 \axesIIID[linecolor=blue](2,2,2)(2.5,2.5,2.5)
635 \end{pspicture}
636 \end{LTXexample}
637
638 \subsubsection{Cube découpé dans des différentes positions}
639
640 Où on utilise l'option permettant de mémoriser un solide pour, après
641 diverses transformations, faire reposer le cube tronqué sur sa face de
642 découpe.
643 \begin{gbar}
644 \begin{verbatim}
645 \psset{solidmemory}
646 \psSolid[object=datfile,
647 fcol=0 (Dandelion),
648 fillcolor={[rgb]{0.7 1 0.7}},
649 name=C1,
650 action=none,
651 file=cubeHexagone]
652 \end{verbatim}
653 \end{gbar}
654
655 \begin{center}
656 \begin{pspicture}(-3,-3)(3,3)
657 \psframe(-3,-2)(3,3)
658 \psset{viewpoint=100 30 20 rtp2xyz,Decran=100}
659 %\lightsource
660 \psset{lightsrc=viewpoint}
661 \psSolid[object=grille,
662 base=-2 3 -2 3,
663 linecolor=gray]
664 \psSolid[object=datfile,
665 fcol=0 (Dandelion),
666 fillcolor={[rgb]{0.7 1 0.7}},
667 file=cubeHexagone]
668 \axesIIID[linecolor=blue](2,2,2)(2.5,2.5,2.5)
669 \end{pspicture}
670
671 \hfil
672
673 \begin{pspicture}(-2,-3)(4,3)
674 \psframe(-2,-2)(4,3)
675 \psset{viewpoint=100 -30 20 rtp2xyz,Decran=100}
676 %\lightsource
677 \psset{lightsrc=viewpoint}
678 \psSolid[object=grille,
679 base=-2 3 -2 3,
680 linecolor=gray]
681 \psSolid[object=datfile,
682 fcol=0 (Dandelion),
683 fillcolor={[rgb]{0.7 1 0.7}},
684 file=cubeHexagone]
685 \axesIIID[linecolor=blue](2,2,2)(2.5,2.5,2.5)
686 \end{pspicture}
687
688 \begin{pspicture}(-3,-2)(3,3)
689 \psframe(-3,-2)(3,3)
690 \psset{viewpoint=100 225 20 rtp2xyz,Decran=100}
691 %\lightsource
692 \psset{lightsrc=viewpoint}
693 \psSolid[object=grille,
694 base=-2 3 -2 3,
695 linecolor=gray]
696 \psSolid[object=datfile,
697 fcol=0 (Dandelion),
698 fillcolor={[rgb]{0.7 1 0.7}},
699 file=cubeHexagone]
700 \axesIIID[linecolor=blue](0,0,0)(2.5,2.5,2.5)
701 \end{pspicture}
702 \hfil
703 \begin{pspicture}(-3,-2)(3,3)
704 \psframe(-3,-2)(3,3)
705 \psset{viewpoint=100 30 20 rtp2xyz,Decran=100}
706 %\lightsource
707 \psset{lightsrc=viewpoint}
708 \psSolid[object=grille,
709 base=-2 3 -2 3,
710 linecolor=gray]
711 \psset{solidmemory}
712 \psSolid[object=datfile,
713 fcol=0 (Dandelion),
714 fillcolor={[rgb]{0.7 1 0.7}},
715 name=C1,
716 action=none,
717 file=cubeHexagone]
718 \codejps{C1 {-1.5 -1.5 0 translatepoint3d} solidtransform
719 drawsolid**
720 }
721 \axesIIID[linecolor=blue](0,0,0)(2.5,2.5,2.5)
722 \end{pspicture}
723
724 \begin{pspicture}(-3,-2)(3,4)
725 \psframe(-3,-2)(3,3)
726 \psset{viewpoint=100 30 20 rtp2xyz,Decran=100}
727 %\lightsource
728 \psset{lightsrc=viewpoint}
729 \psSolid[object=grille,
730 base=-2 3 -2 3,
731 linecolor=gray]
732 \psset{solidmemory}
733 \psSolid[object=datfile,
734 fcol=0 (Dandelion),
735 fillcolor={[rgb]{0.7 1 0.7}},
736 name=C1,
737 action=none,
738 file=cubeHexagone]
739 \codejps{C1 {-1.5 -1.5 0 translatepoint3d} solidtransform
740 {0 0 45 rotateOpoint3d} solidtransform
741 drawsolid**
742 }
743 %\composeSolid
744 \axesIIID[linecolor=blue](0,0,0)(2.5,2.5,2.5)
745 \end{pspicture}
746 \hfil
747 \begin{pspicture}(-3,-2)(3,4)
748 \psframe(-3,-2)(3,3)
749 \psset{viewpoint=100 30 20 rtp2xyz,Decran=100}
750 %\lightsource
751 \psset{lightsrc=viewpoint}
752 \psSolid[object=grille,
753 base=-2 3 -2 3,
754 linecolor=gray]
755 \psset{solidmemory}
756 \psSolid[object=datfile,
757 fcol=0 (Dandelion),
758 fillcolor={[rgb]{0.7 1 0.7}},
759 name=C1,
760 action=none,
761 file=cubeHexagone]
762 \codejps{C1 {-1.5 -1.5 0 translatepoint3d} solidtransform
763 {0 0 45 rotateOpoint3d} solidtransform
764 {-35.2644 -90 add 0 0 rotateOpoint3d} solidtransform
765 drawsolid*
766 }
767 \axesIIID[linecolor=blue](1,2.5,0.5)(2.5,3,2.5)
768 \end{pspicture}
769 \end{center}
770
771
772 \subsection{Sections multiples}
773
774 \subsubsection{Coupes dans une sphère avec \texttt{PStricks}}
775
776 \begin{LTXexample}[width=8cm]
777 \begin{pspicture}(-4,-4)(4,4)
778 \psframe(-4,-4)(4,4)
779 \psset{viewpoint=100 20 20 rtp2xyz,Decran=75}
780 \psset{solidmemory,lightsrc=viewpoint}
781 \codejps{
782 /coeff 0.75 def /rO 4 def /OH coeff rO mul neg def}%
783 \psSolid[object=sphere,
784 r=rO,ngrid=9 18,
785 plansepare={[1 0 0 OH]},
786 name=part,
787 action=none]
788 \psSolid[object=load,
789 load=part1,plansepare={[-1 0 0 OH]},action=none,name=part]
790 \psSolid[object=load,
791 load=part1,plansepare={[0 1 0 OH]},action=none,name=part]
792 \psSolid[object=load,
793 load=part1,plansepare={[0 -1 0 OH]},action=none,name=part]
794 \psSolid[object=load,
795 load=part1,plansepare={[0 0 1 OH]},action=none,name=part]
796 \psSolid[object=load,
797 load=part1,plansepare={[0 0 -1 OH]},action=none,name=part]
798 \psSolid[object=load,hue=.1 .8 0.5 1,
799 load=part1](0,0,0)
800 \composeSolid
801 \end{pspicture}
802 \end{LTXexample}
803
804 \subsubsection{Sections multiples d'un parallélépipède}
805
806 Les sections multiples gagneront à être exécutées dans une boucle
807 \texttt{postscript}, dans \Cadre{\textbackslash codejps}, c'est plus
808 simple et plus rapide !
809
810 Dans cet exemple, le solide de départ est un parallélépipède. Troncatures des sommets et chanfreinages des arêtes sont réalisées avec des plans de coupe successifs, d'abord les sommets puis les arêtes.
811
812 \begin{LTXexample}[width=7cm]
813 \begin{pspicture}(-3.5,-4)(3.5,4)
814 \psset{viewpoint=100 -20 10 rtp2xyz,Decran=100}
815 %\lightsource
816 \psset{lightsrc=viewpoint}
817 \psframe(-3.5,-4)(3.5,4)
818 \codejps{
819 4 4 6 newparallelepiped
820 45 90 360 {
821 /iAngle exch def
822 /n_x iAngle cos 35.2644 cos mul def
823 /n_y iAngle sin 35.2644 cos mul def
824 /n_z 35.2644 sin def
825 /distance 2 3 add 3 sqrt div neg def
826 [ n_x n_y n_z distance]
827 solidplansepare
828 } for
829 45 90 360 {
830 /iAngle exch def
831 /n_x iAngle cos 35.2644 cos mul def
832 /n_y iAngle sin 35.2644 cos mul def
833 /n_z 35.2644 sin neg def
834 /distance 2 3 add 3 sqrt div neg def
835 [ n_x n_y n_z distance]
836 solidplansepare
837 } for
838 45 90 360 {
839 /iAngle exch def
840 % plan : ax+by+cz-d=0
841 [ iAngle cos % a
842 iAngle sin % b
843 0 % c
844 -2.5 % -d
845 ] solidplansepare
846 } for
847 dup [.5 .2] solidputhuecolors
848 solidlightOn
849 drawsolid*}
850 \end{pspicture}
851 \end{LTXexample}
852 \subsection{Sections d'un tore}
853 %\begin{pspicture}(-6,-4)(6,4)
854 %\psSolid[r1=3,r0=1.5,
855 % object=tore,
856 %% ngrid=18 60,
857 % file=tore1860,action=writesolid]
858 %\end{pspicture}
859
860 \begin{center}
861 \begin{pspicture}(-6,-4)(6,4)
862 \pstVerb{/Ampl 3 2 sqrt mul def}%
863 \psset{viewpoint=50 -10 30 rtp2xyz,Decran=50}
864 %\lightsource
865 \psset{lightsrc=viewpoint}
866 \defFunction[algebraic]{lemniscate}(t){1.5}{Ampl*sin(t)/(1+cos(t)*cos(t))}{Ampl*sin(t)*cos(t)/(1+cos(t)*cos(t))}
867 \psframe[fillstyle=solid,fillcolor=gray!50](-6,-4)(6,4)
868 %\psset{solidmemory}
869 %\psSolid[object=datfile,file=tore1860,
870 % plansepare={[1 0 0 -1.5]},
871 % name=lemniscate,
872 % action=none](0,0,0)
873 %\psSolid[object=load,
874 % load=lemniscate1,
875 % file=tore1860lemniscate,action=writesolid](0,0,0)
876 \psSolid[object=datfile,file=tore1860lemniscate,
877 fcol=0 (0.5 0.72 0.5 setrgbcolor)
878 1 (0.5 0.72 0.5 setrgbcolor),
879 fillcolor=green!30,
880 intersectiontype=0,
881 intersectionplan={
882 [1 0 0 -1.5]},
883 intersectioncolor=(rouge),
884 intersectionlinewidth=2.2]
885 \psSolid[object=courbe,r=0,linewidth=2pt,
886 range=0 6.28,
887 linecolor=red,
888 function=lemniscate]%
889 \psSolid[object=plan,action=draw,
890 definition=equation,
891 args={[1 0 0 -1.5] 90},
892 base=-5 5 -2 2,planmarks,showBase]
893 %\composeSolid
894 \end{pspicture}
895 \end{center}
896 \begin{center}
897 \begin{pspicture}(-6,-4)(6,4)
898 \pstVerb{/Ampl 3 2 sqrt mul def}%
899 \defFunction[algebraic]{lemniscate}(t){1.5}{Ampl*sin(t)/(1+cos(t)*cos(t))}{Ampl*sin(t)*cos(t)/(1+cos(t)*cos(t))}
900 \psset{viewpoint=50 -10 30 rtp2xyz,Decran=50}
901 %\lightsource
902 \psset{lightsrc=viewpoint}
903 \psframe[fillstyle=solid,fillcolor=gray!50](-6,-4)(6,4)
904 \psSolid[object=datfile,file=tore1860lemniscate,
905 hollow,
906 rm=0 1,
907 fillcolor=green!30,incolor=yellow!50]
908 \psSolid[object=courbe,r=0,linewidth=2pt,
909 range=0 6.28,
910 linecolor=red,
911 function=lemniscate]%
912 \psSolid[object=plan,action=draw,
913 definition=equation,
914 args={[1 0 0 -1.5] 90},
915 base=-5 5 -2 2,planmarks,showBase]
916 \end{pspicture}
917 \end{center}
918 \subsection{Autres exemples}
919 \begin{enumerate}
920 \item Vous trouverez une version codée de ce document en \Cadre{jps} dans la commande \Cadre{\textbackslash codejps} dans le document suivant :
921
922 \centerline{\url{http://melusine.eu.org/syracuse/mluque/solides3d2007/sections}}
923 \item Une étude des sections coniques sur :
924
925 \centerline{\url{http://melusine.eu.org/syracuse/mluque/solides3d2007/sections/sections-cone}}
926 \item Une étude des sections cylindriques sur :
927
928 \centerline{\url{http://melusine.eu.org/syracuse/mluque/solides3d2007/sections/section-cylindre}}
929 \item Une étude sur les sections du tore :
930
931 \centerline{\url{http://melusine.eu.org/syracuse/mluque/solides3d2007/sections/section-tore}}
932 \end{enumerate}
933
934

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.