Initialisation du projet pst-solides3d.git (SVN revision 142)
[pst-solides3d.git] / doc / .svn / text-base / par-section.tex.svn-base
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.