1 \section {L'objet
\texttt{plan
}}
3 \subsection {Présentation~: type
\textsl{plan\/
} et type
\textsl {solid
} }
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
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...
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+.
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
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
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
}.
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.
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
}.
47 \subsection {Définir un plan orienté
}
49 Pour créer un tel objet, on utilise
\Cadre{[object=plan
]} qui
50 utilise plusieurs arguments~:
54 \item \Cadre{[definition=...
]} qui permet de spécifier la méthode
55 choisie pour définir le plan
57 \item \Cadre{[args=...
]} qui permet de spécifier les arguments
58 nécessaires à la méthode choisie précédemment
60 \item \Cadre{[bases=$xmin$ $xmax$ $ymin$ $ymax$
]} qui permet de
61 spécifier l'étendue sur chacun des axes.
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
70 \subsection {Options spécifiques
}
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
77 \Cadre{[showBase
]} (noter la majuscule) qui projette l'impression des
78 vecteurs de base du plan et qui dessine le vecteur normal associé.
80 Ces options sont valables quelque soit le mode de définition choisi
85 \psset{viewpoint=
10 18 60 rtp2xyz,Decran=
10,fontsize=
10}
86 \begin{pspicture*
}(-
5,-
4)(
6,
4)
92 base=-
2.2 2.2 -
3.2 3.2,
97 \psset{viewpoint=
10 18 60 rtp2xyz,Decran=
10,fontsize=
10}
98 \begin{pspicture*
}(-
5,-
4)(
6,
4)
100 \psSolid[object=plan,
103 fillcolor=Aquamarine,
104 base=-
2.2 2.2 -
3.2 3.2,
110 \psset{viewpoint=
10 18 60 rtp2xyz,Decran=
10,fontsize=
10}
111 \begin{pspicture*
}(-
5,-
4)(
6,
4)
113 \psSolid[object=plan,
116 fillcolor=Aquamarine,
117 base=-
2.2 2.2 -
3.2 3.2,
123 \psset{viewpoint=
10 18 60 rtp2xyz,Decran=
10,fontsize=
10}
124 \begin{pspicture*
}(-
5,-
4)(
6,
4)
126 \psSolid[object=plan,
129 fillcolor=Aquamarine,
130 base=-
2.2 2.2 -
3.2 3.2,
136 \psset{viewpoint=
10 18 60 rtp2xyz,Decran=
10,fontsize=
10}
137 \begin{pspicture*
}(-
5,-
4)(
6,
4)
139 \psSolid[object=plan,
142 fillcolor=Aquamarine,
143 base=-
2.2 2.2 -
3.2 3.2,
149 \psset{viewpoint=
10 18 60 rtp2xyz,Decran=
10,fontsize=
10}
150 \begin{pspicture*
}(-
5,-
4)(
6,
4)
152 \psSolid[object=plan,
155 fillcolor=Aquamarine,
156 base=-
2.2 2.2 -
3.2 3.2,
164 Ces options peuvent être utilisées, même si le plan n'est pas
167 \subsection {Définir un plan à partir d'une équation cartésienne
}
169 On appelle
\textsl{équation cartésienne
} d'un plan affine une équation
174 La donnée des coefficients $a$, $b$, $c$ et $d$ permet de définir un
177 \subsubsection {Utilisation avec l'orientation et l'origine par défaut
}
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
184 Par exemple, le quadruplet $(a, b, c, d) = (
0,
0,
1,
0)$ désigne le
185 plan d'équation $z=
0$~:
190 \psset{viewpoint=
10 18 60 rtp2xyz,Decran=
10,fontsize=
10}
191 \begin{pspicture*
}(-
5,-
4)(
5,
4)
193 \psSolid[object=plan,
196 fillcolor=Aquamarine,
198 base=-
2.2 2.2 -
3.2 3.2,
201 \axesIIID(
0,
0,
0)(
2.2,
3.2,
4)
208 \psSolid[object=plan,
211 fillcolor=Aquamarine,
213 base=-
2.2 2.2 -
3.2 3.2,
219 Le paramètre
\Cadre{[base=xmin xmax ymin ymax
]} permet de spécifier
220 l'étendue sur chacun des axes.
222 \subsubsection {Spécification de l'origine
}
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
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~:
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,
240 fillcolor=Aquamarine,
242 base=-
2.2 2.2 -
3.2 3.2,
245 \axesIIID(
0,
0,
0)(
2.2,
3.2,
4)
251 \psSolid[object=plan,
255 fillcolor=Aquamarine,
256 base=-
2.2 2.2 -
3.2 3.2,
264 \subsubsection {Spécification de l'orientation
}
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 $\
}]}.
273 \psset{viewpoint=
10 18 60 rtp2xyz,Decran=
10,fontsize=
10}
274 \begin{pspicture*
}(-
5,-
4)(
5,
4)
276 \psSolid[object=plan,
279 fillcolor=Aquamarine,
280 base=-
2.2 2.2 -
3.2 3.2,
283 \axesIIID(
0,
0,
0)(
3.2,
2.2,
4)
288 \psSolid[object=plan,
291 fillcolor=Aquamarine,
292 base=-
2.2 2.2 -
3.2 3.2,
298 \subsection {Définir un plan à partir d'un vecteur normal et d'un point
}
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
]}.
304 On peut ensuite préciser ou non l'orientation.
306 \subsubsection {Méthode
1~: Sans préciser l'orientation
}
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 à
315 \psset{viewpoint=
10 18 60 rtp2xyz,Decran=
10,fontsize=
10}
316 \begin{pspicture*
}(-
5,-
4)(
5,
4)
318 \psSolid[object=plan,
319 definition=normalpoint,
320 args=
{0 0 0 [0 0 1]},
321 fillcolor=Aquamarine,
323 base=-
2.2 2.2 -
3.2 3.2,
326 \axesIIID(
0,
0,
0)(
2.2,
3.2,
4)
332 \psSolid[object=plan,
333 definition=normalpoint,
334 args=
{0 0 0 [0 0 1]},
335 fillcolor=Aquamarine,
337 base=-
2.2 2.2 -
3.2 3.2,
343 \subsubsection {Méthode
2~: préciser un angle de rotation
}
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.
355 \psset{viewpoint=
10 18 60 rtp2xyz,Decran=
10, fontsize=
10}
356 \begin{pspicture*
}(-
5,-
4)(
5,
4)
358 \psSolid[object=plan,
359 definition=normalpoint,
360 args=
{0 0 0 [0 0 1 45]},
361 fillcolor=Aquamarine,
363 base=-
2.2 2.2 -
3.2 3.2,
366 \axesIIID(
0,
0,
0)(
2.2,
3.2,
4)
372 \psSolid[object=plan,
373 definition=normalpoint,
374 args=
{0 0 0 [0 0 1 45]},
375 fillcolor=Aquamarine,
377 base=-
2.2 2.2 -
3.2 3.2,
383 \subsubsection {Méthode
3~: préciser le premier vecteur de la base
}
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.
393 \psset{viewpoint=
10 18 60 rtp2xyz,Decran=
10,fontsize=
10}
394 \begin{pspicture*
}(-
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,
401 base=-
2.2 2.2 -
3.2 3.2,
404 \axesIIID(
0,
0,
0)(
2.2,
3.2,
4)
410 \psSolid[object=plan,
411 definition=normalpoint,
412 args=
{0 0 0 [1 1 0 0 0 1]},
413 fillcolor=Aquamarine,
415 base=-
2.2 2.2 -
3.2 3.2,
421 \subsubsection {Méthode
4~: préciser le premier vecteur de la base et
422 un angle de rotation
}
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.
433 \psset{viewpoint=
10 18 60 rtp2xyz,Decran=
10,fontsize=
10}
434 \begin{pspicture*
}(-
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,
441 base=-
2.2 2.2 -
3.2 3.2,
444 \axesIIID(
0,
0,
0)(
2.2,
3.2,
4)
450 \psSolid[object=plan,
451 definition=normalpoint,
452 args=
{0 0 0 [1 1 0 0 0 1 45]},
453 fillcolor=Aquamarine,
455 base=-
2.2 2.2 -
3.2 3.2,
461 \subsection {Définition d'un plan à partir d'une face de solide
}
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.
468 Dans l'exemple ci-dessous, on définit le plan par la face d'indice $
0$
473 \begin{pspicture*
}(-
4,-
2)(
4,
2.3)
474 \psframe(-
4,-
2)(
4,
2.3)
475 \psset{viewpoint=
10 18 20 rtp2xyz,Decran=
10}
477 \psSolid[object=cube,a=
2,fontsize=
20,numfaces=all,name=A
]
478 \psSolid[object=plan,
479 definition=solidface,
490 \psSolid[object=cube,a=
2,fontsize=
20,numfaces=all,
492 \psSolid[object=plan,
493 definition=solidface,
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.
507 \begin{pspicture*
}(-
4,-
2)(
4,
3.5)
508 \psframe(-
4,-
2)(
4,
3.5)
509 \psset{viewpoint=
10 18 25 rtp2xyz,Decran=
10}
511 \psSolid[object=cube,a=
2,fontsize=
20,numfaces=all,name=A
]
512 \psSolid[object=plan,
513 definition=solidface,
524 \psSolid[object=cube,a=
2,fontsize=
20,numfaces=all,
526 \psSolid[object=plan,
527 definition=solidface,
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.
538 %% \begin{multicols}{2}
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,
545 %% linecolor=gray](0,0,0)
546 %% \axesIIID(0,0,0)(4,3,3)
552 %% \psSolid[object=grille,
554 %% linecolor=gray](0,0,0)
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 =
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).
568 %% \begin{multicols}{2}
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,
576 %% linecolor=gray](0,0,0)
577 %% \axesIIID(0,0,0)(3,3,3)
583 %% \psSolid[object=grille,
586 %% linecolor=gray](0,0,0)
590 %% \begin{multicols}{2}
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,
598 %% linecolor=gray](0,0,0)
599 %% \axesIIID(0,0,0)(3,3,3)
605 %% \psSolid[object=grille,
608 %% linecolor=gray](0,0,0)