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