2 \documentclass[12pt
]{article
}
3 \usepackage[a4paper,margin=
2cm
]{geometry
}
4 \usepackage[latin1]{inputenc}
5 \usepackage[T1]{fontenc}
6 \usepackage{amsmath,amssymb
}
7 \usepackage[garamond
]{mathdesign
}
8 \usepackage{pst-anamorphosis-add
}
9 \usepackage{pst-solides3d
}
10 \usepackage[colorlinks=true
]{hyperref
}
12 \multido{\n=-
2.0+
0.5}{9}{%
13 \pnode(!
\n\space 0)
{A
}
14 \pnode(!
\n\space 5)
{B
}
18 \multido{\N=
0+
0.5}{11}{%
25 %% === Echelle pour l'image -----------------------------------------------
26 \define@key
[psset
]{pst-solides3d
}{unitPicture
}{\edef\psk@solides@unitPicture
{#1 }}
27 \psset{unitPicture=
28.45}
28 %% === nombre de divisions des segments -----------------------------------------------
29 \define@key
[psset
]{pst-solides3d
}{divisions
}{\edef\psk@solides@divisions
{#1 }}
32 \def\psImage{\pst@object
{psImage
}}
33 \def\psImage@i
{\@ifnextchar(
{\psImage@ii
}{\psImage@ii(
0,
0)
}}
34 \def\psImage@ii(
#1,
#2)
{{%
35 \ifPst@solidmemory
\use@par
\else\begin@ClosedObj
\fi%
37 %% === adapté de Jean-Michel Sarlat dans pst-anamorphosis ----------------------
38 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
39 %% === Capture de commandes de systemdict --------------------------------------
40 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
41 /LINETO
{ systemdict /lineto get exec
} def
42 /MOVETO
{ systemdict /moveto get exec
} def
43 /CURVETO
{ systemdict /curveto get exec
} def
44 /CLOSEPATH
{ systemdict /closepath get exec
} def
45 /RLINETO
{ systemdict /rlineto get exec
} def
46 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
47 %% === Transformation des commandes de construction des path(s) ----------------
48 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
49 /tx@projectionDict
20 dict def
50 tx@projectionDict begin
52 /s@y ED /s@x ED /c@x s@x def /c@y s@y def
56 sinPhi mul neg exch cosPhi mul add
% x'
58 cosPhi mul exch sinPhi mul add
% y'
65 /c@yt ED /c@xt ED /dx c@xt c@x sub ND div def /dy c@yt c@y sub ND div def
66 1 1 ND
{dup dx mul c@x add exch dy mul c@y add
67 %/Ypoint exch unit_image div def
68 %/Xpoint exch unit_image div def
72 sinPhi mul neg exch cosPhi mul add
% x'
74 cosPhi mul exch sinPhi mul add
% y'
79 /c@x c@xt def /c@y c@yt def
82 s@x s@y lineto CLOSEPATH
89 NDC div /s ED
1 s sub /t ED
90 t c@x mul
3 s c@xa mul mul add t mul
3 s s c@xb mul mul mul add t mul s
3 exp c@xt mul add
91 t c@y mul
3 s c@ya mul mul add t mul
3 s s c@yb mul mul mul add t mul s
3 exp c@yt mul add
95 sinPhi mul neg exch cosPhi mul add
% x'
97 cosPhi mul exch sinPhi mul add
% y'
103 /c@x c@xt def /c@y c@yt def
106 %%%%%%%%%%%%%%%%%%%% fin %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
107 /Atan
{ /atan load stopped
{ pop pop
0 } if
} def
111 /cm
{\pst@number
\psunit mul
} bind def
112 /cm_1
{\pst@number
\psunit div
} bind def
113 /unit_image
\psk@solides@unitPicture def
114 /fichier (
\pst@solides@file) def
115 /Normale
{\pst@solides@normal
\space unitaire3d
} bind def
116 /ND
\psk@solides@divisions def
117 /NDC
{\psk@solides@divisions
3 mul
} bind def
118 /origin
{\pst@solides@origin
\space } def
119 /cosPhi
{phi cos
} bind def
120 /sinPhi
{phi sin
} bind def
125 /Phi
{90 nz arccos sub
} bind def
126 /Theta
{ny nx Atan
} bind def
127 /sinT
{Theta sin
} bind def
128 /cosT
{Theta cos
} bind def
129 /sinP
{Phi sin
} bind def
130 /cosP
{Phi cos
} bind def
136 % projection sur le plan
137 Xpoint sinT mul neg Ypoint sinP cosT mul mul sub xO' add
% x'
138 Xpoint cosT mul Ypoint sinP mul sinT mul sub yO' add
% y'
139 Ypoint cosP mul zO' add
% z'
142 projectionsifacevisible not origin Normale planvisible? or
{
145 tx@projectionDict begin
146 #1 sinT mul neg
#2 sinP cosT mul mul sub
147 #1 cosT mul
#2 sinP mul sinT mul sub
158 \ifPst@solidmemory
\else\end@ClosedObj
\fi}\ignorespaces%
162 \title{Anamorphose cylindrique : l'image dans le cylindre est vue verticalement
}
166 C'est un complément au package `
\textsf{pst-anamorphosis
}'
\footnote{\url{http://melusine.eu.org/syracuse/G/pst-anamorphosis/doc/
}} qui traite déjà de l'anamorphose cylindrique dans le cas où l'image vue est dans un plan horizontal.
168 Les calculs sont identiques à ceux de l'anamorphose
3D
\footnote{\url{http://manuel.luque.perso.neuf.fr/Anamorphoses/anamorphose3D/
}}. Si l'on suppose que l'image doit être vue dans le plan $Oyz$ il suffit donc de faire $x_P=
0$.
170 Objet et image obéissent aux lois de la réflexion de l'optique géométrique :
172 \item rayon incident et rayon réfléchi appartiennent à un même
174 \item rayon incident et rayon réfléchi sont symétriques par
175 rapport à la normale au miroir au point d'incidence.
177 L'image non déformée (celle qui est vue dans le miroir) est
178 placée, dans cet exemple, au centre du miroir. Un rayon incident partant de
179 l'objet anamorphique se réfléchit sur le miroir et après réflexion
180 parvient à l'
{\oe}il de notre observateur. L'observateur a
181 l'illusion que le rayon provient du point image.
182 Il faut donc reconstruire mathématiquement la marche d'un tel
183 rayon lumineux en partant de l'image dans le miroir.
\par
184 L'observateur est suffisamment éloigné du miroir pour pouvoir être
185 considéré comme ponctuel.
186 \section{Les calculs
}
187 Soit $P$ un point de l'image, $V$ l'
{\oe}il de l'observateur. Traçons un
188 droite $PV$ et déterminons le point d'intersection $I$ avec le
189 cylindre : c'est le point d'incidence.
\par
190 $V(x_V,y_V,z_V)$ et $P(x_P,y_P,z_P)$
\par
191 L'équation paramétrique de la droite $(PV)$ s'écrit $
\overrightarrow{IV
}=
\rho\overrightarrow{PV
}$:
195 y_V-y_I&=&
\rho(y_V-y_P)\\
196 z_V-z_I&=&
\rho(z_V-z_P)
203 y_I&=&y_V(
1-
\rho)+
\rho y_P\\
204 z_I&=&z_V(
1-
\rho)+
\rho z_P
208 Le point $I$ appartenant au cylindre, ses coordonnées vérifient la
211 Après développement, on obtient l'équation du second degré en $
\rho$~:
212 $$a
\rho^
2+
2b'
\rho+c=
0$$ avec :
215 a=x_V^
2+(y_V+y_P)^
2\\
216 b'=x_Vx_P+y_Vy_P-x_V^
2-y_V^
2\\
221 La résolution de cette équation nous donne les solutions
225 \rho'=
\dfrac{-b'+
\sqrt{\Delta'
}}{a
}\\
226 \rho''=
\dfrac{-b'-
\sqrt{\Delta'
}}{a
}
229 \qquad \Delta'=b'^
2-ac
231 On retiendra la plus petite valeur positive des deux, que par la suite j'appelle $
\rho$.
233 $IV$ représente le rayon réfléchi par le miroir. Le rayon incident est
234 défini par la droite symétrique de $IV$ par rapport à la normale
235 au miroir en $I$. Je cherche le symétrique de $V$, nommé $V'$ par rapport à
236 cette normale $IN$. Ce point $V'$ remplit deux conditions :
238 \item $
\overrightarrow{IV
}+
\overrightarrow{IV'
}=k
\overrightarrow{IN
}$
239 \item $
\overrightarrow{VV'
}.
\overrightarrow{IN
}=
0$
241 La normale $(IN)$ a pour vecteur directeur
242 $
\overrightarrow{IN
}(x_I,y_I,
0)$\\
243 La première condition se traduit par :
246 x_V-x_I+x_
{V'
}-x_I=kx_I\\
247 y_V-x_I+y_
{V'
}-y_I=ky_I\\
254 x_
{V'
}=kx_I+
2x_I-x_V\\
255 y_
{V'
}=ky_I+
2y_I-y_V\\
261 $$(x_
{V'
}-x_V)x_I+(y_
{V'
}-y_V)y_I=
0$$
262 En remplaçant $x_
{V'
}$ et $y_
{V'
}$ tirés de la première condition
264 $$k(x_I^
2+y_I^
2)+
2x_I^
2-
2x_Vx_I+
2y_I^
2-
2y_Vy_I=
0$$
265 $$kR^
2+
2R^
2=
2(x_Vx_I+y_Vy_I)$$
266 $$k+
2=
\dfrac{2}{R^
2}(x_Vx_I+y_Vy_I)$$
267 Les coordonnées de $V'$ s'en déduisent :
270 x_
{V'
}=(k+
2)x_I-x_V\\
271 y_
{V'
}=(k+
2)y_I-y_V\\
276 Il reste à trouver l'intersection de $(IV')$ avec le plan
277 horizontal $z=
0$.
\par
278 \'Equation paramétrique de $IV'$, M étant un point courant :
279 $
\overrightarrow{MV'
}=
\alpha\overrightarrow{IV'
}$
282 x_
{V
}'-x=
\alpha(x_
{V'
}-x_I)\\
283 y_
{V'
}-y=
\alpha(y_
{V'
}-y_I)\\
284 z_
{V'
}-z=
\alpha(z_
{V'
}-z_I)
288 $z=
0\Longrightarrow \alpha=
\dfrac{z_
{V'
}}{z_
{V'
}-z_I
}$ soit
289 $$
\alpha=
\dfrac{(
1-
2\rho)z_V+
\rho z_P
}{-
\rho z_V+
\rho z_P
}$$
290 En remplaçant $
\alpha$ par son expression, nous obtenons les coordonnées du point de l'objet
294 x=x_
{V'
}-
\alpha(x_
{V'
}-x_I)\\
295 y=y_
{V'
}-
\alpha(y_
{V'
}-y_I)
299 Cette série de calculs doit être appliquée à tous les points de
300 l'image « normale » afin d'obtenir l'objet anamorphique (déformé)
301 dont le miroir « redressera » la forme.
303 On notera que la position en hauteur de l'observateur $z_V$ intervient dans le coefficient $
\alpha$.
306 % /Zp exch s@@y mul t@@y add def /Xp exch s@@x mul t@@x add def
307 % /a Xv Xp sub dup mul Yv dup mul add def
308 % /b Xv Xp mul Xv dup mul sub Yv dup mul sub def
309 % /c R neg Xv dup mul add Yv dup mul add def
310 % /d b dup mul a c mul sub 0.5 exp def
311 % /rho1 b neg d sub a div def
312 % /rho2 b neg d add a div def
313 % rho2 rho1 ge {/rho rho1 def}{/rho rho2 def} ifelse
314 % /xi Xv dup Xp sub rho mul sub def
315 % /yi Yv 1 rho sub mul def
316 % /zi Zv dup Zp sub rho mul sub def
317 % /alpha 2 zi mul Zv sub zi Zv sub div def
318 % /k 2 Xv xi mul Yv yi mul add mul R div def
319 % /xv k xi mul Xv sub def
320 % /yv k yi mul Yv sub def
321 % xv dup xi sub alpha mul sub
322 % yv dup yi sub alpha mul sub
326 \begin{pspicture
}(-
8,-
8)(
10,
6)
327 \psframe(-
8,-
8)(
10,
6)
328 \psset{viewpoint=
100 -
20 40 rtp2xyz,Decran=
60,lightsrc=viewpoint
}
329 \psSolid[object=plan,
330 definition=normalpoint,
331 args=
{0 0 0 [1 0 0 90]},
332 action=draw,linecolor=red,
336 \psSolid[object=plan,
337 definition=normalpoint,
338 args=
{0 0 0 [0 0 1 -
90]},
339 action=draw,linecolor=red,
344 \psImage[file=sylvestreA4.eps,normal=
0 0 1,origine=
0 0 0,divisions=
2,unitPicture=
23](
0,
7)
345 \defFunction[algebraic
]{Cylindre
}(t)
{2*cos(t)
}{2*sin(t)
}{0}
346 \psSolid[object=cylindre,function=Cylindre,
%unit=0.035,
352 fillcolor=blue!
20](
0,
0,
0)
353 \multido{\n=-
2.0+
0.5}{9}{\psLineIIID(
0,
\n,
0)(
0,
\n,
5)
}
354 \multido{\nz=
0.0+
0.5}{11}{\psLineIIID(
0,-
2,
\nz)(
0,
2,
\nz)
}
355 \psImage[file=sylvestre.eps,normal=
1 0 0,origine=
0 0 0,divisions=
5](
0,
2.5)
356 \defFunction[algebraic
]{Cylindre
}(t)
{2*cos(t)
}{2*sin(t)
}{0}
357 \psSolid[object=cylindre,function=Cylindre,
358 range=-
1.57 1.57,opacity=
0.2,
363 fillcolor=blue!
20](
0,
0,
0)
364 \psSolid[object=plan,
369 \psProjection[object=cercle,plan=monplan,
372 \psSolid[object=plan,
377 \psProjection[object=cercle,plan=monPlan,
381 \psLineIIID[linecolor=red
](
0,-
11,
6)(
0,
11,
6)
%}
382 \axesIIID(
0,
0,
0)(
14,
14,
7)
385 \section{Le nouveau paramètre
}
386 Pour garder la compatibilité avec le package `
\textsf{pst-anamorphosis
}', une nouvelle option a été rajoutée
\colorbox{yellow
}{\texttt{type=cylindricalV
}}.
389 \begin{pspicture
}(-
11,-
12)(
11,
7)
391 \rput(
0,
6)
{\parbox{4cm
}{Cette image est en \\
392 réalité perpendiculaire au plan de la figure
}}
393 \psset{Yv=-
15,Xv=
0,Zv=
15,type=cylindricalV,Rmirror=
2}
395 \psanamorphosis[drawanamorphosis=true
](
0,
2.5)
{sylvestre.eps
}
399 \begin{pspicture
}(-
11,-
12)(
11,
7)
401 \rput(
0,
6)
{\parbox{4cm
}{Cette image est en \
\réalité perpendiculaire au plan de la figure
}}
402 \psset{Yv=-
15,Xv=
0,Zv=
15,type=cylindricalV,Rmirror=
2}
404 \psanamorphosis[drawanamorphosis=true
](
0,
2.5)
{sylvestre.eps
}
408 Une autre option a encore été rajoutée permettant de placer ou non l'image vue dans le cylindre :
\colorbox{yellow
}{\texttt{image
}}.
410 \section{Un autre exemple
}
411 La carte est extraite du jeu proposé par
\url{http://sourceforge.net/projects/vector-cards/?source=dlp
}.
414 \begin{pspicture
}(-
10,-
12)(
10,
9)
415 \pscircle[doubleline=true
]{2}
416 \psset{Yv=-
15,Xv=
0,Zv=
15,type=cylindricalV,Rmirror=
2}
417 \psanamorphosis[drawanamorphosis=true,scale=
0.6 0.6](
0,
0)
{KH_2.eps
}
419 \psset{linestyle=dotted,linecolor=red
}
420 \multido{\n=-
2+
0.5}{9}{%
421 \pnode(!
\n\space 0)
{A
}
422 \pnode(!
\n\space 5.5)
{B
}
426 \multido{\N=
0.0+
0.5}{12}{%
432 \rput(
0,
6.5)
{\parbox{4cm
}{Cette carte est en \
\réalité perpendiculaire au plan de la figure
}}
436 \begin{pspicture
}(-
10,-
12)(
10,
12)
437 \pscircle[doubleline=true
]{2}
438 \psset{Yv=-
15,Xv=
0,Zv=
15,type=cylindricalV,Rmirror=
2}
439 \psanamorphosis[drawanamorphosis=true,scale=
0.6 0.6](
0,
0)
{KH_2.eps
}
441 \psset{linestyle=dotted,linecolor=red
}
442 \multido{\n=-
2+
0.5}{9}{%
443 \pnode(!
\n\space 0)
{A
}
444 \pnode(!
\n\space 5.5)
{B
}
448 \multido{\N=
0.0+
0.5}{12}{%