jeudi 10 novembre 2011

Créer un moiré tournant : partie 1, ou comment se compliquer la vie pour faire des choses inutiles, mais belles ?

À la boutique du musée Beaubourg (centre Pompidou) on peut acheter des cartes "turn the top part" composées d'une image fixe et d'une feuille transparente sur laquelle une trame noire est dessinée fixée au centre de la précédente. En faisant tourner la feuille transparente des effets de moirage apparaissent.
Voici les deux éléments de la carte :
Les dessins ont été réalisés avec PStricks et les commandes de base :
La trame transparente  :
\psclip{\psframe[linestyle=none](-5,-7)(5,7)}
\multido{\i=0+2}{36}{%
    \pstVerb{/kA \i\space def
             /A1 kA 5 mul def
             /A2 A1 5 add def}%
 \pswedge*(0,0){9}{!A1}{!A2}}%
\endpsclip

L'image fixe est constituée par les superpositions successives de 4 trames de la plus grande à la plus petite. C'est une trame identique à la trame transparente, mais dont les secteurs vides sont alternativement coloriés en vert et en orange.

def\trameColorA{
\multido{\i=0+2}{36}{%
    \pstVerb{/kA \i\space def
             /A1 kA 5 mul def
             /A2 A1 5 add def}%
 \pswedge*(0,0){9}{!A1}{!A2}}%
\multido{\i=1+4}{25}{%
    \pstVerb{/kA \i\space def
             /A1 kA 5 mul def
             /A2 A1 5 add def}%
 \pswedge*[linecolor=green](0,0){9}{!A1}{!A2}}
\multido{\i=3+4}{24}{%
    \pstVerb{/kA \i\space def
             /A1 kA 5 mul def
             /A2 A1 5 add def}%
 \pswedge*[linecolor={[cmyk]{0 0.5 1 0}}](0,0){9}{!A1}{!A2}}%
}%
Les autres s'obtiennent simplement par rotation des secteurs.
Ainsi pour la deuxième :

\def\trameColorB{
\multido{\i=1+2}{36}{%
    \pstVerb{/kA \i\space def
             /A1 kA 5 mul def
             /A2 A1 5 add def}%
 \pswedge*(0,0){9}{!A1}{!A2}}%
\multido{\i=2+4}{25}{%
    \pstVerb{/kA \i\space def
             /A1 kA 5 mul def
             /A2 A1 5 add def}%
 \pswedge*[linecolor=green](0,0){9}{!A1}{!A2}}
\multido{\i=4+4}{24}{%
    \pstVerb{/kA \i\space def
             /A1 kA 5 mul def
             /A2 A1 5 add def}%
 \pswedge*[linecolor={[cmyk]{0 0.5 1 0}}](0,0){9}{!A1}{!A2}}%
}%
etc.

Ces trames sont ensuite découpées aux dimensions adéquates :

\def\imageFixe{
\psclip{\psframe[linestyle=none](-5,-7)(5,7)}
\trameColorA
\endpsclip
\psclip{\psframe[linestyle=none](-5,-5)(5,5)}
\trameColorB
\endpsclip
\psclip{\psframe[linestyle=none](-3.75,-3.75)(3.75,3.75)}
\trameColorC
\endpsclip
\psclip{\psframe[linestyle=none](-2.5,-2.5)(2.5,2.5)}
\trameColorD
\endpsclip
\psclip{\psframe[linestyle=none](-1.25,-1.25)(1.25,1.25)}
\trameColorA
\endpsclip
}


La dernière étape consiste à produire 121 images décalées de 1,5° (pour faire un demi-tour)

\multido{\nA=0.0+1.5}{121}{%
\psscalebox{0.5}{
\begin{pspicture}(-9,-9)(9,9)
\psframe(-9,-9)(9,9)
\imageFixe
\rput{\nA}{\transparent}
\end{pspicture}}
\newpage}

La deuxième partie consistera à détailler la production des images et de l'animation. Voici un Gif animé

et ici une animation au format SWF réalisée par Jean-Michel Sarlat.

Le code complet pour obtenir le fichier postscript qui servira de base pour créer toutes les images nécessaires à l'animation :

\documentclass{article}
\usepackage{pstricks,multido}
\SpecialCoor
\pagestyle{empty}
\psset{dimen=middle}
% image fixe
\def\trameColorA{
\multido{\i=0+2}{36}{%
    \pstVerb{/kA \i\space def
             /A1 kA 5 mul def
             /A2 A1 5 add def}%
 \pswedge*(0,0){9}{!A1}{!A2}}%
\multido{\i=1+4}{25}{%
    \pstVerb{/kA \i\space def
             /A1 kA 5 mul def
             /A2 A1 5 add def}%
 \pswedge*[linecolor=green](0,0){9}{!A1}{!A2}}
\multido{\i=3+4}{24}{%
    \pstVerb{/kA \i\space def
             /A1 kA 5 mul def
             /A2 A1 5 add def}%
 \pswedge*[linecolor={[cmyk]{0 0.5 1 0}}](0,0){9}{!A1}{!A2}}%
}%
\def\trameColorB{
\multido{\i=1+2}{36}{%
    \pstVerb{/kA \i\space def
             /A1 kA 5 mul def
             /A2 A1 5 add def}%
 \pswedge*(0,0){9}{!A1}{!A2}}%
\multido{\i=2+4}{25}{%
    \pstVerb{/kA \i\space def
             /A1 kA 5 mul def
             /A2 A1 5 add def}%
 \pswedge*[linecolor=green](0,0){9}{!A1}{!A2}}
\multido{\i=4+4}{24}{%
    \pstVerb{/kA \i\space def
             /A1 kA 5 mul def
             /A2 A1 5 add def}%
 \pswedge*[linecolor={[cmyk]{0 0.5 1 0}}](0,0){9}{!A1}{!A2}}%
}%
\def\trameColorC{
\multido{\i=2+2}{36}{%
    \pstVerb{/kA \i\space def
             /A1 kA 5 mul def
             /A2 A1 5 add def}%
 \pswedge*(0,0){9}{!A1}{!A2}}%
\multido{\i=3+4}{25}{%
    \pstVerb{/kA \i\space def
             /A1 kA 5 mul def
             /A2 A1 5 add def}%
 \pswedge*[linecolor=green](0,0){9}{!A1}{!A2}}
\multido{\i=5+4}{24}{%
    \pstVerb{/kA \i\space def
             /A1 kA 5 mul def
             /A2 A1 5 add def}%
 \pswedge*[linecolor={[cmyk]{0 0.5 1 0}}](0,0){9}{!A1}{!A2}}%
}%
\def\trameColorD{
\multido{\i=3+2}{36}{%
    \pstVerb{/kA \i\space def
             /A1 kA 5 mul def
             /A2 A1 5 add def}%
 \pswedge*(0,0){9}{!A1}{!A2}}%
\multido{\i=4+4}{25}{%
    \pstVerb{/kA \i\space def
             /A1 kA 5 mul def
             /A2 A1 5 add def}%
 \pswedge*[linecolor=green](0,0){9}{!A1}{!A2}}
\multido{\i=6+4}{24}{%
    \pstVerb{/kA \i\space def
             /A1 kA 5 mul def
             /A2 A1 5 add def}%
 \pswedge*[linecolor={[cmyk]{0 0.5 1 0}}](0,0){9}{!A1}{!A2}}%
}%

\def\imageFixe{
\psclip{\psframe[linestyle=none](-5,-7)(5,7)}
\trameColorA
\endpsclip
\psclip{\psframe[linestyle=none](-5,-5)(5,5)}
\trameColorB
\endpsclip
\psclip{\psframe[linestyle=none](-3.75,-3.75)(3.75,3.75)}
\trameColorC
\endpsclip
\psclip{\psframe[linestyle=none](-2.5,-2.5)(2.5,2.5)}
\trameColorD
\endpsclip
\psclip{\psframe[linestyle=none](-1.25,-1.25)(1.25,1.25)}
\trameColorA
\endpsclip
}
\def\transparent{%
\psclip{\psframe[linestyle=none](-5,-7)(5,7)}
\multido{\i=0+2}{36}{%
    \pstVerb{/kA \i\space def
             /A1 kA 5 mul def
             /A2 A1 5 add def}%
 \pswedge*(0,0){9}{!A1}{!A2}}%
\endpsclip}
%
\begin{document}
\multido{\nA=0.0+1.5}{121}{%
\psscalebox{0.5}{
\begin{pspicture}(-9,-9)(9,9)
\psframe(-9,-9)(9,9)
\imageFixe
\rput{\nA}{\transparent}
\end{pspicture}}
\newpage}
\end{document}


Aucun commentaire:

Enregistrer un commentaire