Initialisation du projet pst-solides3d.git (SVN revision 142)
[pst-solides3d.git] / doc / par-plan.tex
1 \section {L'objet \texttt{plan}}
2
3 \subsection {Présentation~: type \textsl{plan\/} et type \textsl {solid} }
4
5 Le statut de l'objet \verb+plan+ est tout à fait particulier dans
6 \verb+pst-solides3d+. En effet, tous les objets vus jusqu'à présents
7 ont une structure commune~: ils sont de type \textsl{solid}. Autrement
8 dit ils sont entièrement définis par une liste de sommets, de faces et
9 de couleurs.
10 Or pour de nombreuses applications, il est nécessaire d'avoir des
11 renseignements complémentaires pour un plan~: une origine, une
12 orientation, une base de référence, etc...
13
14 Pour pouvoir répondre à ces exigences, il a été créé une autre
15 structure de données, dite de type \textsl {plan}, qui permet de
16 stocker toutes les informations nécessaires. Toutes les
17 manipulations de plan vont transiter par un tel objet. Ce n'est qu'au
18 moment de la représentation que l'objet de type \textsl {plan\/} sera
19 converti en un objet de type \textsl {solid\/} représentable par la
20 macro \verb+\psSolid+.
21
22 Un objet de type \textsl{plan\/} permet donc de décrire une portion de
23 plan affine orienté. Pour une définition complète d'un tel objet, il
24 nous faut une origine
25 $I$, une base vectorielle $(\vec u, \vec v)$ de ce
26 plan, une étendue sur l'axe $(I, \vec u)$ et une étendue sur l'axe
27 $(I, \vec v)$.
28 De plus, on pourra spécifier le maillage souhaité, autrement dit le
29 nombre de facettes utilisées pour représenter cette portion de plan
30 affine lors de la transformation en objet de type \textsl{solid}.
31
32 Ce type d'objet peut être utilisé pour définir des sections
33 planes, et il est obligatoire pour définir un plan de projection.
34
35 Son utilisation est transparente pour l'utilisateur PSTricks. La seule
36 chose à savoir, c'est que lorsque l'on manipule un
37 \verb+[object=plan]+ avec la macro \verb+\psSolid+, on manipule en
38 fait deux objets en même temps~: l'un de type \textsl{plan\/} et
39 l'autre de type \textsl{solid}. Et lorsque l'on demande une sauvegarde
40 de cet objet (voir le chapitre <<\textsl {Utilisation avancée}>>) sous
41 le nom $monplan$ par exemple avec l'option \verb+[name=monplan]+, ce
42 sont en fait $2$ sauvegardes qui sont effectuées. La première, sous le
43 nom $monplan$, est l'objet de type \textsl{plan}, et la deuxième, sous
44 le nom $monplan\_s$, est l'objet de type \textsl {solid}.
45
46
47 \subsection {Définir un plan orienté}
48
49 Pour créer un tel objet, on utilise \Cadre{[object=plan]} qui
50 utilise plusieurs arguments~:
51
52 \begin{itemize}
53
54 \item \Cadre{[definition=...]} qui permet de spécifier la méthode
55 choisie pour définir le plan
56
57 \item \Cadre{[args=...]} qui permet de spécifier les arguments
58 nécessaires à la méthode choisie précédemment
59
60 \item \Cadre{[bases=$xmin$ $xmax$ $ymin$ $ymax$]} qui permet de
61 spécifier l'étendue sur chacun des axes.
62
63 \item \Cadre{[phi]} (valeur $0$ par défaut) qui spécifie l'angle de
64 rotation (en degrés) du plan autour de sa normale après sa
65 définition première.
66
67
68 \end{itemize}
69
70 \subsection {Options spécifiques}
71
72 L'objet \verb+plan+ possède plusieurs options spécifiques d'affichage~:
73 \Cadre{[planmarks]} qui projette l'impression des axes et graduations,
74 \Cadre{[plangrid]} qui projette l'impression d'un quadrillage,
75 \Cadre{[showbase]} qui projette l'impression des vecteurs de base du
76 plan, et
77 \Cadre{[showBase]} (noter la majuscule) qui projette l'impression des
78 vecteurs de base du plan et qui dessine le vecteur normal associé.
79
80 Ces options sont valables quelque soit le mode de définition choisi
81 pour le plan.
82
83 \begin{center}
84 \psset{unit=0.4}
85 \psset{viewpoint=10 18 60 rtp2xyz,Decran=10,fontsize=10}
86 \begin{pspicture*}(-5,-4)(6,4)
87 \psframe(-5,-4)(5,3)
88 \psSolid[object=plan,
89 definition=equation,
90 args={[0 0 1 0]},
91 fillcolor=Aquamarine,
92 base=-2.2 2.2 -3.2 3.2,
93 ]
94 \end{pspicture*}
95 %%
96 \psset{unit=1}
97 \psset{viewpoint=10 18 60 rtp2xyz,Decran=10,fontsize=10}
98 \begin{pspicture*}(-5,-4)(6,4)
99 \psframe(-5,-4)(5,3)
100 \psSolid[object=plan,
101 definition=equation,
102 args={[0 0 1 0]},
103 fillcolor=Aquamarine,
104 base=-2.2 2.2 -3.2 3.2,
105 planmarks,
106 ]
107 \end{pspicture*}
108 %%
109 \psset{unit=1}
110 \psset{viewpoint=10 18 60 rtp2xyz,Decran=10,fontsize=10}
111 \begin{pspicture*}(-5,-4)(6,4)
112 \psframe(-5,-4)(5,3)
113 \psSolid[object=plan,
114 definition=equation,
115 args={[0 0 1 0]},
116 fillcolor=Aquamarine,
117 base=-2.2 2.2 -3.2 3.2,
118 plangrid,
119 ]
120 \end{pspicture*}
121 %%
122 \psset{unit=1}
123 \psset{viewpoint=10 18 60 rtp2xyz,Decran=10,fontsize=10}
124 \begin{pspicture*}(-5,-4)(6,4)
125 \psframe(-5,-4)(5,3)
126 \psSolid[object=plan,
127 definition=equation,
128 args={[0 0 1 0]},
129 fillcolor=Aquamarine,
130 base=-2.2 2.2 -3.2 3.2,
131 showbase,
132 ]
133 \end{pspicture*}
134 %%
135 \psset{unit=1}
136 \psset{viewpoint=10 18 60 rtp2xyz,Decran=10,fontsize=10}
137 \begin{pspicture*}(-5,-4)(6,4)
138 \psframe(-5,-4)(5,3)
139 \psSolid[object=plan,
140 definition=equation,
141 args={[0 0 1 0]},
142 fillcolor=Aquamarine,
143 base=-2.2 2.2 -3.2 3.2,
144 showBase,
145 ]
146 \end{pspicture*}
147 %%
148 \psset{unit=1}
149 \psset{viewpoint=10 18 60 rtp2xyz,Decran=10,fontsize=10}
150 \begin{pspicture*}(-5,-4)(6,4)
151 \psframe(-5,-4)(5,3)
152 \psSolid[object=plan,
153 definition=equation,
154 args={[0 0 1 0]},
155 fillcolor=Aquamarine,
156 base=-2.2 2.2 -3.2 3.2,
157 plangrid,
158 showBase,
159 action=none
160 ]
161 \end{pspicture*}
162 \end{center}
163
164 Ces options peuvent être utilisées, même si le plan n'est pas
165 représenté.
166
167 \subsection {Définir un plan à partir d'une équation cartésienne}
168
169 On appelle \textsl{équation cartésienne} d'un plan affine une équation
170 du type
171 \[
172 ax+by+cz+d=0
173 \]
174 La donnée des coefficients $a$, $b$, $c$ et $d$ permet de définir un
175 plan affine.
176
177 \subsubsection {Utilisation avec l'orientation et l'origine par défaut}
178
179 Pour définir un plan affine, on peut utiliser
180 \Cadre{[definition=equation]}, et \Cadre{[args=\{[$a$ $b$ $c$
181 $d$]\}]}. L'orientation et l'origine du plan affine sont alors choisis
182 par le package.
183
184 Par exemple, le quadruplet $(a, b, c, d) = (0, 0, 1, 0)$ désigne le
185 plan d'équation $z=0$~:
186
187 \begin{multicols}{2}
188 %\begin{center}
189 \psset{unit=0.65}
190 \psset{viewpoint=10 18 60 rtp2xyz,Decran=10,fontsize=10}
191 \begin{pspicture*}(-5,-4)(5,4)
192 \psframe(-5,-4)(5,4)
193 \psSolid[object=plan,
194 definition=equation,
195 args={[0 0 1 0]},
196 fillcolor=Aquamarine,
197 planmarks,
198 base=-2.2 2.2 -3.2 3.2,
199 showbase,
200 ]
201 \axesIIID(0,0,0)(2.2,3.2,4)
202 \end{pspicture*}
203 %\end{center}
204
205 \columnbreak
206
207 \begin{verbatim}
208 \psSolid[object=plan,
209 definition=equation,
210 args={[0 0 1 0]},
211 fillcolor=Aquamarine,
212 planmarks,
213 base=-2.2 2.2 -3.2 3.2,
214 showbase,
215 ]
216 \end{verbatim}
217 \end{multicols}
218
219 Le paramètre \Cadre{[base=xmin xmax ymin ymax]} permet de spécifier
220 l'étendue sur chacun des axes.
221
222 \subsubsection {Spécification de l'origine}
223
224 Le paramètre \Cadre{[origine=$x_0$ $y_0$ $z_0$]} permet de spécifier
225 l'origine du plan affine. Si le point $(x_0, y_0, z_0)$ proposé ne
226 vérifie pas l'équation du plan, alors on ne tient pas compte de cette
227 origine.
228
229 Par exemple, voici une représentation du plan d'équation $z=0$ pour
230 laquelle on a spécifié $(1, 2, 0)$ comme origine~:
231
232 \begin{multicols}{2}
233 \psset{unit=0.65}
234 \psset{viewpoint=10 18 60 rtp2xyz,Decran=10,fontsize=10}
235 \begin{pspicture*}(-4,-5.5)(6,4)
236 \psframe(-4,-5.5)(6,4)
237 \psSolid[object=plan,
238 definition=equation,
239 args={[0 0 1 0]},
240 fillcolor=Aquamarine,
241 origine=1 2 0,
242 base=-2.2 2.2 -3.2 3.2,
243 planmarks,
244 ]
245 \axesIIID(0,0,0)(2.2,3.2,4)
246 \end{pspicture*}
247
248 \columnbreak
249
250 \begin{verbatim}
251 \psSolid[object=plan,
252 definition=equation,
253 args={[0 0 1 0]},
254 origine=1 2 0,
255 fillcolor=Aquamarine,
256 base=-2.2 2.2 -3.2 3.2,
257 planmarks,
258 ]
259 \end{verbatim}
260 \end{multicols}
261
262
263
264 \subsubsection {Spécification de l'orientation}
265
266 Si l'orientation proposée ne convient pas, on peut spécifier un angle
267 de rotation $\alpha $ (en degrés) autour de la normale avec la syntaxe
268 \Cadre{[args=\{[a b c d] $\alpha $\}]}.
269
270 \begin{multicols}{2}
271
272 \psset{unit=0.65}
273 \psset{viewpoint=10 18 60 rtp2xyz,Decran=10,fontsize=10}
274 \begin{pspicture*}(-5,-4)(5,4)
275 \psframe(-5,-4)(5,4)
276 \psSolid[object=plan,
277 definition=equation,
278 args={[0 0 1 0] 90},
279 fillcolor=Aquamarine,
280 base=-2.2 2.2 -3.2 3.2,
281 planmarks,
282 ]
283 \axesIIID(0,0,0)(3.2,2.2,4)
284 \end{pspicture*}
285
286 \columnbreak
287 \begin{verbatim}
288 \psSolid[object=plan,
289 definition=equation,
290 args={[0 0 1 0] 90},
291 fillcolor=Aquamarine,
292 base=-2.2 2.2 -3.2 3.2,
293 planmarks,
294 ]
295 \end{verbatim}
296 \end{multicols}
297
298 \subsection {Définir un plan à partir d'un vecteur normal et d'un point}
299
300 Il est possible de définir un plan affine à partir d'un point et d'un
301 vecteur normal. On utilise pour cela le paramètre
302 \Cadre{[definition=normalpoint]}.
303
304 On peut ensuite préciser ou non l'orientation.
305
306 \subsubsection {Méthode 1~: Sans préciser l'orientation}
307
308 On utilise \Cadre{[args=\{$x_0$ $y_0$ $z_0$ [$a$ $b$ $c$]\}]} où $(x_0,
309 y_0, z_0)$ est l'origine du plan affine, et $(a, b, c)$ un vecteur normal à
310 ce plan.
311
312 \begin{multicols}{2}
313
314 \psset{unit=0.65}
315 \psset{viewpoint=10 18 60 rtp2xyz,Decran=10,fontsize=10}
316 \begin{pspicture*}(-5,-4)(5,4)
317 \psframe(-5,-4)(5,4)
318 \psSolid[object=plan,
319 definition=normalpoint,
320 args={0 0 0 [0 0 1]},
321 fillcolor=Aquamarine,
322 planmarks,
323 base=-2.2 2.2 -3.2 3.2,
324 showbase,
325 ]
326 \axesIIID(0,0,0)(2.2,3.2,4)
327 \end{pspicture*}
328
329 \columnbreak
330
331 \begin{verbatim}
332 \psSolid[object=plan,
333 definition=normalpoint,
334 args={0 0 0 [0 0 1]},
335 fillcolor=Aquamarine,
336 planmarks,
337 base=-2.2 2.2 -3.2 3.2,
338 showbase,
339 ]
340 \end{verbatim}
341 \end{multicols}
342
343 \subsubsection {Méthode 2~: préciser un angle de rotation}
344
345 On utilise \Cadre{[args=\{$x_0$ $y_0$ $z_0$ [$a$ $b$ $c$ $\alpha
346 $]\}]} où $(x_0, y_0, z_0)$ est l'origine du plan affine, $(a, b,
347 c)$ un vecteur normal à ce plan, et $\alpha $ l'angle de rotation (en
348 degrés) autour de l'axe normal.
349
350 %\newpage
351
352 \begin{multicols}{2}
353
354 \psset{unit=0.65}
355 \psset{viewpoint=10 18 60 rtp2xyz,Decran=10, fontsize=10}
356 \begin{pspicture*}(-5,-4)(5,4)
357 \psframe(-5,-4)(5,4)
358 \psSolid[object=plan,
359 definition=normalpoint,
360 args={0 0 0 [0 0 1 45]},
361 fillcolor=Aquamarine,
362 planmarks,
363 base=-2.2 2.2 -3.2 3.2,
364 showbase,
365 ]
366 \axesIIID(0,0,0)(2.2,3.2,4)
367 \end{pspicture*}
368
369 \columnbreak
370
371 \begin{verbatim}
372 \psSolid[object=plan,
373 definition=normalpoint,
374 args={0 0 0 [0 0 1 45]},
375 fillcolor=Aquamarine,
376 planmarks,
377 base=-2.2 2.2 -3.2 3.2,
378 showbase,
379 ]
380 \end{verbatim}
381 \end{multicols}
382
383 \subsubsection {Méthode 3~: préciser le premier vecteur de la base}
384
385 On utilise \Cadre{[args=\{$x_0$ $y_0$ $z_0$ [$u_x$ $u_y$ $u_z$ $a$ $b$
386 $c$ ]\}]} où $(x_0, y_0, z_0)$ est l'origine du plan affine,
387 $(a, b, c)$ un vecteur normal à ce plan, et $(u_x, u_y, u_z)$ le
388 premier vecteur d'une base de ce plan.
389
390 \begin{multicols}{2}
391
392 \psset{unit=0.65}
393 \psset{viewpoint=10 18 60 rtp2xyz,Decran=10,fontsize=10}
394 \begin{pspicture*}(-5,-4)(5,4)
395 \psframe(-5,-4)(5,4)
396 \psSolid[object=plan,
397 definition=normalpoint,
398 args={0 0 0 [1 1 0 0 0 1]},
399 fillcolor=Aquamarine,
400 planmarks,
401 base=-2.2 2.2 -3.2 3.2,
402 showbase,
403 ]
404 \axesIIID(0,0,0)(2.2,3.2,4)
405 \end{pspicture*}
406
407 \columnbreak
408
409 \begin{verbatim}
410 \psSolid[object=plan,
411 definition=normalpoint,
412 args={0 0 0 [1 1 0 0 0 1]},
413 fillcolor=Aquamarine,
414 planmarks,
415 base=-2.2 2.2 -3.2 3.2,
416 showbase,
417 ]
418 \end{verbatim}
419 \end{multicols}
420
421 \subsubsection {Méthode 4~: préciser le premier vecteur de la base et
422 un angle de rotation}
423
424 On utilise \Cadre{[args=\{$x_0$ $y_0$ $z_0$ [$u_x$ $u_y$ $u_z$ $a$ $b$
425 $c$ $\alpha $]\}]} où $(x_0, y_0, z_0)$ est l'origine du plan affine,
426 $(a, b, c)$ un vecteur normal à ce plan, et $(u_x, u_y, u_z)$ le
427 premier vecteur d'une base de ce plan, auquel on fait subir une
428 rotation de $\alpha $ (en degrés) autour de l'axe normal.
429
430 \begin{multicols}{2}
431
432 \psset{unit=0.65}
433 \psset{viewpoint=10 18 60 rtp2xyz,Decran=10,fontsize=10}
434 \begin{pspicture*}(-5,-4)(5,4)
435 \psframe(-5,-4)(5,4)
436 \psSolid[object=plan,
437 definition=normalpoint,
438 args={0 0 0 [1 1 0 0 0 1 45]},
439 fillcolor=Aquamarine,
440 planmarks,
441 base=-2.2 2.2 -3.2 3.2,
442 showbase,
443 ]
444 \axesIIID(0,0,0)(2.2,3.2,4)
445 \end{pspicture*}
446
447 \columnbreak
448
449 \begin{verbatim}
450 \psSolid[object=plan,
451 definition=normalpoint,
452 args={0 0 0 [1 1 0 0 0 1 45]},
453 fillcolor=Aquamarine,
454 planmarks,
455 base=-2.2 2.2 -3.2 3.2,
456 showbase,
457 ]
458 \end{verbatim}
459 \end{multicols}
460
461 \subsection {Définition d'un plan à partir d'une face de solide}
462
463 On utilise \Cadre{[definition=solidface]} avec les arguments
464 \Cadre{[args=$name$ $i$]} où $name$ est un nom désignant le solide et
465 $i$ est l'indice de la face considérée. On prend pour origine le
466 centre de la face considérée.
467
468 Dans l'exemple ci-dessous, on définit le plan par la face d'indice $0$
469 du cube nommé $A$.
470
471 \begin{multicols}{2}
472
473 \begin{pspicture*}(-4,-2)(4,2.3)
474 \psframe(-4,-2)(4,2.3)
475 \psset{viewpoint=10 18 20 rtp2xyz,Decran=10}
476 \psset{solidmemory}
477 \psSolid[object=cube,a=2,fontsize=20,numfaces=all,name=A]
478 \psSolid[object=plan,
479 definition=solidface,
480 args=A 0,
481 showBase,
482 ]
483 \composeSolid
484 \end{pspicture*}
485
486 \columnbreak
487
488 \begin{verbatim}
489 \psset{solidmemory}
490 \psSolid[object=cube,a=2,fontsize=20,numfaces=all,
491 name=A]
492 \psSolid[object=plan,
493 definition=solidface,
494 args=A 0,
495 showBase,
496 ]
497 \end{verbatim}
498 \end{multicols}
499
500 Si l'utilisateur précise les coordonnées $(x, y, z)$ dans la macro
501 \verb+\psSolid[...](+$x,y,z$\verb+)+, alors le plan construit est
502 parallèle à la face d'indice $i$ du solide $name$, et il passe par le
503 point $(x, y, z)$ qui est pris pour origine.
504
505 \begin{multicols}{2}
506
507 \begin{pspicture*}(-4,-2)(4,3.5)
508 \psframe(-4,-2)(4,3.5)
509 \psset{viewpoint=10 18 25 rtp2xyz,Decran=10}
510 \psset{solidmemory}
511 \psSolid[object=cube,a=2,fontsize=20,numfaces=all,name=A]
512 \psSolid[object=plan,
513 definition=solidface,
514 args=A 0,
515 showBase,
516 ](0,0,2)
517 \composeSolid
518 \end{pspicture*}
519
520 \columnbreak
521
522 \begin{verbatim}
523 \psset{solidmemory}
524 \psSolid[object=cube,a=2,fontsize=20,numfaces=all,
525 name=A]
526 \psSolid[object=plan,
527 definition=solidface,
528 args=A 0,
529 showBase,
530 ](0,0,2)
531 \end{verbatim}
532 \end{multicols}
533
534
535 %% Le paramètre \verb+[base=+$x{min}$ ${x{max}}$ ${y{min}}$
536 %% ${y{max}}$\verb+]+ permet de spécifier la taille de la grille.
537 %%
538 %% \begin{multicols}{2}
539 %% \psset{unit=1}
540 %% \psset{viewpoint=50 50 20 rtp2xyz,Decran=30}
541 %% \begin{pspicture}(-4,-2)(3,3)
542 %% \psframe(-4,-2)(3,3)
543 %% \psSolid[object=grille,
544 %% base=0 4 -3 3,
545 %% linecolor=gray](0,0,0)
546 %% \axesIIID(0,0,0)(4,3,3)
547 %% \end{pspicture}
548 %%
549 %% \columnbreak
550 %%
551 %% \begin{verbatim}
552 %% \psSolid[object=grille,
553 %% base=0 4 -3 3,
554 %% linecolor=gray](0,0,0)
555 %% \end{verbatim}
556 %% \end{multicols}
557 %%
558 %% Le paramètre \verb+[ngrid=+$n_1$ $n_2$\verb+]+ permet de spécifier le
559 %% maillage de la grille. Si $n_2$ est absent, on considère que $n_2 =
560 %% n_1$.
561 %%
562 %% Si $n_1$ est entier, il représente le nombre de mailles sur l'axe
563 %% $Ox$. S'il est réel, il représente le pas de maillage sur l'axe
564 %% $Ox$. Par exemple, le nombre codé \verb+1+ est entier, alors que celui
565 %% codé \verb+1.+ est réel (noter le point).
566 %%
567 %%
568 %% \begin{multicols}{2}
569 %% \psset{unit=1}
570 %% \psset{viewpoint=50 50 20 rtp2xyz,Decran=30}
571 %% \begin{pspicture}(-4,-2)(3,3)
572 %% \psframe(-4,-2)(3,3)
573 %% \psSolid[object=grille,
574 %% ngrid=1,
575 %% base=0 4 -3 3,
576 %% linecolor=gray](0,0,0)
577 %% \axesIIID(0,0,0)(3,3,3)
578 %% \end{pspicture}
579 %%
580 %% \columnbreak
581 %%
582 %% \begin{verbatim}
583 %% \psSolid[object=grille,
584 %% ngrid=1,
585 %% base=0 4 -3 3,
586 %% linecolor=gray](0,0,0)
587 %% \end{verbatim}
588 %% \end{multicols}
589 %%
590 %% \begin{multicols}{2}
591 %% \psset{unit=1}
592 %% \psset{viewpoint=50 50 20 rtp2xyz,Decran=30}
593 %% \begin{pspicture}(-4,-2)(3,3)
594 %% \psframe(-4,-2)(3,3)
595 %% \psSolid[object=grille,
596 %% ngrid=1. 1,
597 %% base=0 4 -3 3,
598 %% linecolor=gray](0,0,0)
599 %% \axesIIID(0,0,0)(3,3,3)
600 %% \end{pspicture}
601 %%
602 %% \columnbreak
603 %%
604 %% \begin{verbatim}
605 %% \psSolid[object=grille,
606 %% ngrid=1. 1,
607 %% base=0 4 -3 3,
608 %% linecolor=gray](0,0,0)
609 %% \end{verbatim}
610 %% \end{multicols}
611 %%
612 %%

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.