???
[pst-anamorphosis.git] / doc / anamorphose_cylindrique_verticale.tex
1
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}
11 \def\Cadre{{%
12 \multido{\n=-2.0+0.5}{9}{%
13 \pnode(! \n\space 0){A}
14 \pnode(! \n\space 5){B}
15 \psline(A)(B)
16 \pslineA(A)(B)
17 }
18 \multido{\N=0+0.5}{11}{%
19 \pnode(!-2 \N){A}
20 \pnode(!2 \N){B}
21 \pslineA(A)(B)
22 \psline(A)(B)
23 }}}
24 \makeatletter
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 }}
30 \psset{divisions=10}
31 %%
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%
36 \addto@pscode{
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
51 /moveto {
52 /s@y ED /s@x ED /c@x s@x def /c@y s@y def
53 s@x unit_image div
54 s@y unit_image div
55 2 copy
56 sinPhi mul neg exch cosPhi mul add % x'
57 3 1 roll
58 cosPhi mul exch sinPhi mul add % y'
59 /Ypoint exch def
60 /Xpoint exch def
61 projectionimage
62 MOVETO
63 } bind def
64 /lineto {
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
69 unit_image div exch
70 unit_image div exch
71 2 copy
72 sinPhi mul neg exch cosPhi mul add % x'
73 3 1 roll
74 cosPhi mul exch sinPhi mul add % y'
75 /Ypoint exch def
76 /Xpoint exch def
77 projectionimage
78 LINETO} for
79 /c@x c@xt def /c@y c@yt def
80 } bind def
81 /closepath {
82 s@x s@y lineto CLOSEPATH
83 } bind def
84 /curveto {
85 /c@yt ED /c@xt ED
86 /c@yb ED /c@xb ED
87 /c@ya ED /c@xa ED
88 1 1 NDC {
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
92 unit_image div exch
93 unit_image div exch
94 2 copy
95 sinPhi mul neg exch cosPhi mul add % x'
96 3 1 roll
97 cosPhi mul exch sinPhi mul add % y'
98 /Ypoint exch def
99 /Xpoint exch def
100 projectionimage
101 LINETO
102 } for
103 /c@x c@xt def /c@y c@yt def
104 } bind def
105 end
106 %%%%%%%%%%%%%%%%%%%% fin %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
107 /Atan { /atan load stopped { pop pop 0 } if } def
108 save
109 \tx@optionssolides
110 SolidesDict begin
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
121 Normale
122 /nz exch def
123 /ny exch def
124 /nx exch 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
131 origin
132 /zO' exch def
133 /yO' exch def
134 /xO' exch def
135 /projectionimage {
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'
140 3dto2d %
141 } def
142 projectionsifacevisible not origin Normale planvisible? or {
143 /showpage {} def
144 gsave
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
148 #2 cosP mul
149 3dto2d
150 translate
151 fichier run
152 end
153 grestore
154 } if
155 end
156 restore
157 }%
158 \ifPst@solidmemory\else\end@ClosedObj\fi}\ignorespaces%
159 }
160 \makeatother
161 \parindent=0pt
162 \title{Anamorphose cylindrique : l'image dans le cylindre est vue verticalement}
163 \date{6 avril 2013}
164 \begin{document}
165 \maketitle
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.
167
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$.
169
170 Objet et image obéissent aux lois de la réflexion de l'optique géométrique :
171 \begin{itemize}
172 \item rayon incident et rayon réfléchi appartiennent à un même
173 plan ;
174 \item rayon incident et rayon réfléchi sont symétriques par
175 rapport à la normale au miroir au point d'incidence.
176 \end{itemize}
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}$:
192 $$\left\lbrace
193 \begin{array}{lcl}
194 x_V-x_I&=&\rho x_V\\
195 y_V-y_I&=&\rho(y_V-y_P)\\
196 z_V-z_I&=&\rho(z_V-z_P)
197 \end{array}
198 \right.
199 \Longrightarrow
200 \left\lbrace
201 \begin{array}{lcl}
202 x_I&=&x_V(1-\rho)\\
203 y_I&=&y_V(1-\rho)+\rho y_P\\
204 z_I&=&z_V(1-\rho)+\rho z_P
205 \end{array}
206 \right.
207 $$
208 Le point $I$ appartenant au cylindre, ses coordonnées vérifient la
209 relation :
210 $$x_I^2+y_I^2=R$$
211 Après développement, on obtient l'équation du second degré en $\rho$~:
212 $$a\rho^2+2b'\rho+c=0$$ avec :
213 $$\left\lbrace
214 \begin{array}{l}
215 a=x_V^2+(y_V+y_P)^2\\
216 b'=x_Vx_P+y_Vy_P-x_V^2-y_V^2\\
217 c=x_V^2+y_V^2-R^2
218 \end{array}
219 \right.
220 $$
221 La résolution de cette équation nous donne les solutions
222 classiques:
223 $$\left\lbrace
224 \begin{array}{l}
225 \rho'=\dfrac{-b'+\sqrt{\Delta'}}{a}\\
226 \rho''=\dfrac{-b'-\sqrt{\Delta'}}{a}
227 \end{array}
228 \right.
229 \qquad \Delta'=b'^2-ac
230 $$
231 On retiendra la plus petite valeur positive des deux, que par la suite j'appelle $\rho$.
232 \par
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 :
237 \begin{enumerate}
238 \item $\overrightarrow{IV}+\overrightarrow{IV'}=k\overrightarrow{IN}$
239 \item $\overrightarrow{VV'}.\overrightarrow{IN}=0$
240 \end{enumerate}
241 La normale $(IN)$ a pour vecteur directeur
242 $\overrightarrow{IN}(x_I,y_I,0)$\\
243 La première condition se traduit par :
244 $$\left\lbrace
245 \begin{array}{l}
246 x_V-x_I+x_{V'}-x_I=kx_I\\
247 y_V-x_I+y_{V'}-y_I=ky_I\\
248 z_V-z_I+z_{V'}-z_I=0
249 \end{array}
250 \right.
251 \Longrightarrow
252 \left\lbrace
253 \begin{array}{l}
254 x_{V'}=kx_I+2x_I-x_V\\
255 y_{V'}=ky_I+2y_I-y_V\\
256 z_{V'}=2z_I-z_V
257 \end{array}
258 \right.
259 $$
260 La deuxième par :
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
263 dans la deuxième :
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 :
268 $$ \left\lbrace
269 \begin{array}{l}
270 x_{V'}=(k+2)x_I-x_V\\
271 y_{V'}=(k+2)y_I-y_V\\
272 z_{V'}=z_V(1-2\rho)
273 \end{array}
274 \right.
275 $$
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'}$
280 $$ \left\lbrace
281 \begin{array}{l}
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)
285 \end{array}
286 \right.
287 $$
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
291 anamorphique.
292 $$ \left\lbrace
293 \begin{array}{l}
294 x=x_{V'}-\alpha(x_{V'}-x_I)\\
295 y=y_{V'}-\alpha(y_{V'}-y_I)
296 \end{array}
297 \right.
298 $$
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.
302
303 On notera que la position en hauteur de l'observateur $z_V$ intervient dans le coefficient $\alpha$.
304
305 %\begin{verbatim}
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
323 %\end{verbatim}
324
325 \begin{center}
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,
333 % planmarks,
334 % showBase,
335 base=-11 11 0 6]
336 \psSolid[object=plan,
337 definition=normalpoint,
338 args={0 0 0 [0 0 1 -90]},
339 action=draw,linecolor=red,
340 % planmarks,
341 % showBase,
342 base=-11 11 -8 13]
343 \psset{solidmemory}
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,
347 range=1.57 4.71,
348 axe=0 0 1,h=6,
349 ngrid=1 42,grid,
350 incolor=yellow!50,
351 linecolor=blue!20,
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,
359 axe=0 0 1,h=6,
360 ngrid=1 42,grid,
361 incolor=yellow!50,
362 linecolor=blue!20,
363 fillcolor=blue!20](0,0,0)
364 \psSolid[object=plan,
365 definition=equation,
366 args={[0 0 1 -6]},
367 action=none,
368 name=monplan]
369 \psProjection[object=cercle,plan=monplan,
370 args=0 0 2,
371 range=0 360]
372 \psSolid[object=plan,
373 definition=equation,
374 args={[0 0 1 0]},
375 action=none,
376 name=monPlan]
377 \psProjection[object=cercle,plan=monPlan,
378 linestyle=dotted,
379 args=0 0 2,
380 range=0 360]
381 \psLineIIID[linecolor=red](0,-11,6)(0,11,6)%}
382 \axesIIID(0,0,0)(14,14,7)
383 \end{pspicture}
384 \end{center}
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}}.
387 \begin{center}
388 \psscalebox{0.75}{
389 \begin{pspicture}(-11,-12)(11,7)
390 \pscircle{2}
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}
394 \Cadre
395 \psanamorphosis[drawanamorphosis=true](0,2.5){sylvestre.eps}
396 \end{pspicture}}
397 \end{center}
398 \begin{verbatim}
399 \begin{pspicture}(-11,-12)(11,7)
400 \pscircle{2}
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}
403 \Cadre
404 \psanamorphosis[drawanamorphosis=true](0,2.5){sylvestre.eps}
405 \end{pspicture}
406 \end{verbatim}
407
408 Une autre option a encore été rajoutée permettant de placer ou non l'image vue dans le cylindre : \colorbox{yellow}{\texttt{image}}.
409 \newpage
410 \section{Un autre exemple}
411 La carte est extraite du jeu proposé par \url{http://sourceforge.net/projects/vector-cards/?source=dlp}.
412 \begin{center}
413 \psscalebox{0.66}{
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}
418 {%
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}
423 \psline(A)(B)
424 \pslineA(A)(B)
425 }
426 \multido{\N=0.0+0.5}{12}{%
427 \pnode(!-2 \N){A}
428 \pnode(!2 \N){B}
429 \pslineA(A)(B)
430 \psline(A)(B)
431 }}
432 \rput(0,6.5){\parbox{4cm}{Cette carte est en \\réalité perpendiculaire au plan de la figure}}
433 \end{pspicture}}
434 \end{center}
435 \begin{verbatim}
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}
440 {%
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}
445 \psline(A)(B)
446 \pslineA(A)(B)
447 }
448 \multido{\N=0.0+0.5}{12}{%
449 \pnode(!-2 \N){A}
450 \pnode(!2 \N){B}
451 \pslineA(A)(B)
452 \psline(A)(B)
453 }}
454 \end{pspicture}
455 \end{verbatim}
456 \end{document}

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.