Les molécules sont constituées d'un atome central et de 4 atomes de grosseurs et de couleurs différentes schématisés par des sphères et reliés par des tiges.
On donne un des énantiomères et on construit l'autre par symétrie par rapport à un plan.
Pour accélérer l'affichage et les calculs des images nécessaires à une animation les caractéristiques des deux molécules sont calculées une fois pour toute et enregistrées sur le disque.
On opère dans le \codejps{...} ce qui permet de travail uniquement avec postscript sans passer par les variables LaTeX : on gagne ainsi un peu de rapidité dans les calculs.
\documentclass[a4paper]{article}
\usepackage{pst-solides3d}
\pagestyle{empty}
\begin{document}
% Ecriture des fichiers
\begin{center}
\begin{pspicture}(-7,-7)(7,7)
\psset{lightsrc=50 50 10,lightintensity=1,viewpoint=1000 50 20 rtp2xyz,Decran=250}
\codejps{
/atome1 {2 [18 16] newsphere
{-90 0 0 rotateOpoint3d} solidtransform
{0 10.93 0 translatepoint3d} solidtransform} def
/atome2 {2.25 [18 16] newsphere
{-90 0 0 rotateOpoint3d} solidtransform
{0 10.93 0 translatepoint3d} solidtransform} def
/atome3 {2.5 [18 16] newsphere
{-90 0 0 rotateOpoint3d} solidtransform
{0 10.93 0 translatepoint3d} solidtransform} def
/atome4 {2.75 [18 16] newsphere
{-90 0 0 rotateOpoint3d} solidtransform
{0 10.93 0 translatepoint3d} solidtransform} def
/H1 {atome1 dup (White) outputcolors} def
/H2 {atome2 dup (rouge) outputcolors} def
/H3 {atome3 dup (jaune) outputcolors} def
/H4 {atome4 dup (bleu) outputcolors} def
/L1 {
0 0.25 10 [12 10] newcylindre
{-90 0 0 rotateOpoint3d} solidtransform
dup (White) outputcolors
} def
/L2 { L1 {0 0 -109.5 rotateOpoint3d} solidtransform } def
/HL1{ H1 L1 solidfuz} def
/HL2 { H2 L1 solidfuz {0 0 -109.5 rotateOpoint3d} solidtransform } def
/HL3 { H3 L1 solidfuz {0 0 -109.5 rotateOpoint3d} solidtransform {0 -120 0 rotateOpoint3d} solidtransform } def
/HL4 { H4 L1 solidfuz {0 0 -109.5 rotateOpoint3d} solidtransform {0 120 0 rotateOpoint3d} solidtransform } def
/C {3 [18 16] newsphere
{90 0 0 rotateOpoint3d} solidtransform
dup (gris) outputcolors} def
/HL12 { HL1 HL2 solidfuz} def
/HL123 { HL12 HL3 solidfuz} def
/HL1234 { HL123 HL4 solidfuz} def
/methane { HL1234 C solidfuz} def
methane {90 0 0 rotateOpoint3d} solidtransform
(molecule) writesolidfile
(molecule) readsolidfile
dupsolid exch pop
{[1 0 0 0] symplan3d} solidtransform
dup solidfacesreverse
(moleculechirale) writesolidfile
}
\end{pspicture}
\end{center}
\end{document}
Ensuite on peut afficher une image pour voir si le résultat est satisfaisant :
\documentclass[a4paper]{article}
\usepackage{pst-solides3d}
\pagestyle{empty}
\begin{document}
\begin{center}
\begin{pspicture}(-7,-7)(7,7)
\psset{lightsrc=50 50 10,lightintensity=1,viewpoint=1000 50 20 rtp2xyz,Decran=125}
\psframe*[linecolor=gray!10](-7,-7)(7,7)
\psSolid[object=datfile,file=moleculechirale,deactivatecolor=true,grid,RotZ=90](-15,0,0)
\psSolid[object=plan,action=draw**,
fillcolor=blue!20,opacity=0.5,
linecolor=blue,
definition=equation,
args={[1 0 0 0] 90},
showBase,
base=-75 75 -35 35]
\psSolid[object=datfile,file=molecule,deactivatecolor=true,grid,RotZ=-90](15,0,0)
\end{pspicture}
\end{center}
\end{document}
LaTeX->DVIPS ->ps2pdf
Pour l'animation, il fait créer les images dans un fichier postscript, par une boucle :
\documentclass[a4paper]{article}
\usepackage{pst-solides3d}
\pagestyle{empty}
\begin{document}
\begin{center}
\multido{\Rotz=0+10}{36}{
\begin{pspicture}(-7,-7)(7,7)
\psset{lightsrc=50 50 10,lightintensity=1,viewpoint=1000 50 20 rtp2xyz,Decran=125}
\psframe*[linecolor=gray!10](-7,-7)(7,7)
\psSolid[object=datfile,file=moleculechirale,deactivatecolor=true,grid,RotZ=\Rotz](-15,0,0)
\psSolid[object=plan,action=draw**,
fillcolor=blue!20,opacity=0.5,
linecolor=blue,
definition=equation,
args={[1 0 0 0] 90},
showBase,
base=-75 75 -35 35]
\psSolid[object=datfile,file=molecule,deactivatecolor=true,grid,RotZ=-\Rotz](15,0,0)
\end{pspicture}\newpage}
\end{center}
\end{document}
Puis extraire chaque page du fichier, par exemple sous DOS :
For %N in (1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36) Do psselect -p%N chiral_images.ps page%N.ps
Et les convertir en fichier eps, avec la commande perl, toujours sous DOS :
For %N in (1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36) Do perl ps2eps.pl page%N.ps
http://www.ipv6.tm.uka.de/~bless/ps2eps
Transformer les eps en pdf :
FOR %G IN (*.eps) DO gswin32c -sDEVICE=pdfwrite -dEPSCrop -o "%~nG.pdf" "%~nG.eps"
Pour un gif animé :
FOR %G IN (*.pdf) DO convert "%G" "%~nG.gif"
suivi de :
convert -delay 10 -loop 0 *.gif animation.gif
Pour un pdf animé avec la roulette de la souris, il faut réunir tous les pdf dans un fichier unique, par exemple avec PDFTK Builder :
http://www.angusj.com/pdftkb/
Pour une animation au format flash, les fichiers pdf étant trop volumineux, il faut les convertir en png :
FOR %G IN (*.pdf) DO convert "%G" "%~nG.png"
Puis avec les outils de swftools :
png2swf -r 0.5 page*.png -o chiral.swf
Tous les fichiers sont ici (le fichier zippé les contient tous) :
Aucun commentaire:
Enregistrer un commentaire