Le fichier ayant servi à créer les images pour le Gif animé, avec les données (bart.zip) dans :
dimanche 2 août 2015
samedi 1 août 2015
Une illustration de la distorsion de champ en optique avec Henri Bouasse, PStricks, et POV-ray
Distorsion de champ : approche théorique
Dans son livre Optique et photométrie paru aux éditions Delagrave en 1934, Henri Bouasse propose une approche géométrique de ce phénomène, indépendant du système optique centré utilisé. C’est un paragraphe de deux pages (31 et 32) :
En fait depuis l’année où Henri Bouasse écrivit son livre, des auteurs ont modélisé ces phénomènes de distorsion de façon plus précise et rigoureuse, voir toutes les références citées dans l’article de Wikipedia :
https://en.wikipedia.org/wiki/Distortion_%28optics%29
Distorsion de champ : représentation avec la formule d’Henri Bouasse et PStricks
J’utilise le package pst-nltr, en prenant comme formule de transformation celle proposée par Henri Bouasse.
http://pstricks.blogspot.fr/2013/01/transformations-non-lineaires.html
http://pstricks.blogspot.fr/2013/08/voici-le-drapeau-allemand-flottant-par.html
http://pstricks.blogspot.fr/2013/07/mickey-travers-lesdeformations-spatio.html
http://pstricks.blogspot.fr/2013/07/les-ondulations-delastoctiramolla.html
http://pstricks.blogspot.fr/2013/07/propagation-dune-onde-dans-un-dessin.html
http://pstricks.blogspot.fr/2013/07/propagation-dune-onde-longitudinale_24.html
http://pstricks.blogspot.fr/2013/07/propagation-dune-onde-longitudinale-le.html
et tous les autres exemples s’y rapportant.
Représentation avec les formules actuelles (voir Wikipedia)
Je prends la formule simplifiée avec le terme d’ordre 3, en coordonnées polaires :
ru est le rayon d’un point de l’image initiale non distordue (undistorted image point) ;
rd est le rayon d’un point de l’image déformée par le système optique (distorted image point).
L’image initiale est connue. Pour chaque point on détermine le rayon :
et, k étant fixé, on résout l’équation par la méthode de Newton afin de trouver rd. Comme Henri Bouasse, considérons que la coordonnée azimutale est la même, ce qui permet d’en déduire les coordonnées du point de l’image déformée.
Distorsion de champ : simulation avec POV-ray
POV-ray représente de façon assez réaliste bien des phénomènes optiques, et la distorsion de champ est bien rendue. Ces exemples se limitent aux deux types de lentilles convergentes et divergentes.
Lentille convergente
Les fichiers pov sont dans le dossier :
Lentille divergente
Le fichier lentille_biconcave_barillet.pov dans :
Voici le fichier de la documentation avec les exemples ainsi que les fichiers sources :
(distorsion-2015.pdf et distorsion-2015.tex barillet.eps coussinet.eps tiger.eps) sont dans le dossier indiqué ci-dessus.
Le package (pst-nltr.pro pst-nltr.dty pst-nltr.tex) est aussi dans ce dossier.
Dans son livre Optique et photométrie paru aux éditions Delagrave en 1934, Henri Bouasse propose une approche géométrique de ce phénomène, indépendant du système optique centré utilisé. C’est un paragraphe de deux pages (31 et 32) :
« – Supposons l’appareil stigmatique et aplanétique pour un plan de front P. Nous n’avons
pas encore complètement défini la correspondance du point A objet et du point A′ image.
Par raison de symétrie, au point A(ρ, θ) du plan P correspond un point A′(ρ′,θ′) du plan P′: la coordonnée azimutale ρ est la même. Mais il existe une relation a priori quelconque : ρ′= f (ρ), entre les rayons vecteurs.
Développons la fonction f en série ; limitons-nous aux deux premiers termes :
Si b est nul, l’appareil est stigmatique, aplanétique et sans distorsion pour le plan frontal P.
ρ=a2ρ ± b2ρ2
Si b n’est pas nul, il y a distorsion de champ.
Une ligne droite AB située dans le plan frontal objet P et ne passant pas par l’origine, n’a pour image une ligne droite que si b= 0. Sinon elle est transformée en une courbe C présentant vers l’axe de révolution : sa convexité pour le signe +, sa concavité pour le signe −. »
En fait depuis l’année où Henri Bouasse écrivit son livre, des auteurs ont modélisé ces phénomènes de distorsion de façon plus précise et rigoureuse, voir toutes les références citées dans l’article de Wikipedia :
https://en.wikipedia.org/wiki/Distortion_%28optics%29
Distorsion de champ : représentation avec la formule d’Henri Bouasse et PStricks
J’utilise le package pst-nltr, en prenant comme formule de transformation celle proposée par Henri Bouasse.
http://pstricks.blogspot.fr/2013/01/transformations-non-lineaires.html
http://pstricks.blogspot.fr/2013/08/voici-le-drapeau-allemand-flottant-par.html
http://pstricks.blogspot.fr/2013/07/mickey-travers-lesdeformations-spatio.html
http://pstricks.blogspot.fr/2013/07/les-ondulations-delastoctiramolla.html
http://pstricks.blogspot.fr/2013/07/propagation-dune-onde-dans-un-dessin.html
http://pstricks.blogspot.fr/2013/07/propagation-dune-onde-longitudinale_24.html
http://pstricks.blogspot.fr/2013/07/propagation-dune-onde-longitudinale-le.html
et tous les autres exemples s’y rapportant.
Je prends la formule simplifiée avec le terme d’ordre 3, en coordonnées polaires :
ru= rd (1+k rd2)
ru est le rayon d’un point de l’image initiale non distordue (undistorted image point) ;
rd est le rayon d’un point de l’image déformée par le système optique (distorted image point).
L’image initiale est connue. Pour chaque point on détermine le rayon :
et, k étant fixé, on résout l’équation par la méthode de Newton afin de trouver rd. Comme Henri Bouasse, considérons que la coordonnée azimutale est la même, ce qui permet d’en déduire les coordonnées du point de l’image déformée.
Distorsion de champ : simulation avec POV-ray
POV-ray représente de façon assez réaliste bien des phénomènes optiques, et la distorsion de champ est bien rendue. Ces exemples se limitent aux deux types de lentilles convergentes et divergentes.
Lentille convergente
Les fichiers pov sont dans le dossier :
Lentille divergente
Le fichier lentille_biconcave_barillet.pov dans :
Voici le fichier de la documentation avec les exemples ainsi que les fichiers sources :
(distorsion-2015.pdf et distorsion-2015.tex barillet.eps coussinet.eps tiger.eps) sont dans le dossier indiqué ci-dessus.
Le package (pst-nltr.pro pst-nltr.dty pst-nltr.tex) est aussi dans ce dossier.
mercredi 29 juillet 2015
Obtenir le chemin d’un caractère, d’un mot ou d'une phrase
(mise à jour 30/07/2015 : version 2)
La commande \psCharPath[options] permet d’obtenir les contours externes et internes d’un caractère, d’un mot ou d’une phrase. Elle comporte plusieurs options, dont j’indique les valeurs par défaut :
Par défaut, sous Windows et Linux, la protection des fichiers du disque dur est activée et ne permet donc pas l’écriture sur le disque. Pour désactiver cette protection, tout au moins temporairement, voici les deux procédures correspondantes :
Linux : le plus simple est donc d’utiliser ghostscript directement, en console. Comme il n’y a rien à
attendre comme image :
$> gs -dNOSAFER monfichier.ps quit.ps
Windows : dans le menu Options, l’option Protection des fichiers ne doit pas être cochée.
Les options ayant été choisies, il faut compiler par LATEX, puis DVIPS et enfin GSview qui lance l’interpréteur Postscript. Plusieurs fichiers sont générés, numérotés à partir de 0, suivi de nombre de points du chemin.
Exemple par la commande :
\begin{pspicture}(-1,-0.1)(1,0.1)
\psCharPath[text=Enzo]
\end{pspicture}
On a comme premier fichier : Enzo-0-77.dat. Ce fichier est le chemin extérieur de E, il comporte 77 points, dont les coordonnées sont en cm. Le nombre de points se règle avec l’option setflat [0.2 à 100]. Le premier point fixe le moveto, les suivants sont les extrémités des segments tracés avec lineto. Pour fermer le chemin il faudrait rajouter à la fin closepath. Les fichiers suivants (1,2 etc.) sont ceux, soit des contours intérieurs ou extérieurs de la première lettre ou des lettres suivantes. Le deuxième nombre qui indique le nombre de points servira pour le nombre de boucles (multido) pour un tracé pas à pas avec un crayon(voir les exemples Agnès et Enzo).
Avec pst-solides3d la macro : \psProjection[object=line,args=tabE] permet le tracé de ce contour, si on a défini au départ tabE par :
\pstVerb{/tabE {(Enzo-0-77.dat) run} def}%
On pourrait utiliser \psProjection[object=polygone,args=tabE] mais cette option souffre d’un bug, il faut donc modifier cette macro comme dans l’exemple de l’avion :
http://pstricks.blogspot.fr/2015/07/pst-crayon-dessiner-un-avion.html
\begin{pspicture}(-1,-0.2)(1,0.2)
\psCharPath[text=Agnès,file=agnes]
\end{pspicture}
Pour un tracé pas à pas, il faut définir un tableau : voir les différents exemples liés au package pst-crayon, celui d’Agnès est dans le sous-dossier (psCharPath/agnes-draw.tex) et celui pour l’obtention des données (psCharPath/aagnes-dat.tex) sont dans :
L'animation Gif obtenue :
La documentation au format pdf, ainsi que le fichier source (psCharPath/psCharPath-v2.pdf psCharPath/psCharPath-v2.tex) sont dans :
Ancienne version (psCharPath/psCharPath.pdf psCharPath/psCharPath.tex) au même endroit.
Le tracé pas à pas d'Enzo (/psCharPath/enzo-dat.tex /psCharPath/enzo-draw.tex) :
La commande \psCharPath[options] permet d’obtenir les contours externes et internes d’un caractère, d’un mot ou d’une phrase. Elle comporte plusieurs options, dont j’indique les valeurs par défaut :
- [text=A] : le caractère ou le texte ;
- [setflat=1] : sa valeur fixe la précision, c’est-à-dire le nombre de points [0.2 à 100] ;
- [PSfont=Times-Roman] : type de fonte postscript(ces options ont été reprises de pst-solides3d) ;
- [fontsize=100] : taille de la fonte en points ;
- [file=text] : préfixe des noms des fichiers, par défaut c’est le texte dont on calcule le chemin(ce nom ne prend pas les caractères accentués).
- [isolatin=true] : pour des caractères accentués ou non.
Par défaut, sous Windows et Linux, la protection des fichiers du disque dur est activée et ne permet donc pas l’écriture sur le disque. Pour désactiver cette protection, tout au moins temporairement, voici les deux procédures correspondantes :
Linux : le plus simple est donc d’utiliser ghostscript directement, en console. Comme il n’y a rien à
attendre comme image :
$> gs -dNOSAFER monfichier.ps quit.ps
Windows : dans le menu Options, l’option Protection des fichiers ne doit pas être cochée.
Les options ayant été choisies, il faut compiler par LATEX, puis DVIPS et enfin GSview qui lance l’interpréteur Postscript. Plusieurs fichiers sont générés, numérotés à partir de 0, suivi de nombre de points du chemin.
Exemple par la commande :
\begin{pspicture}(-1,-0.1)(1,0.1)
\psCharPath[text=Enzo]
\end{pspicture}
On a comme premier fichier : Enzo-0-77.dat. Ce fichier est le chemin extérieur de E, il comporte 77 points, dont les coordonnées sont en cm. Le nombre de points se règle avec l’option setflat [0.2 à 100]. Le premier point fixe le moveto, les suivants sont les extrémités des segments tracés avec lineto. Pour fermer le chemin il faudrait rajouter à la fin closepath. Les fichiers suivants (1,2 etc.) sont ceux, soit des contours intérieurs ou extérieurs de la première lettre ou des lettres suivantes. Le deuxième nombre qui indique le nombre de points servira pour le nombre de boucles (multido) pour un tracé pas à pas avec un crayon(voir les exemples Agnès et Enzo).
Avec pst-solides3d la macro : \psProjection[object=line,args=tabE] permet le tracé de ce contour, si on a défini au départ tabE par :
\pstVerb{/tabE {(Enzo-0-77.dat) run} def}%
On pourrait utiliser \psProjection[object=polygone,args=tabE] mais cette option souffre d’un bug, il faut donc modifier cette macro comme dans l’exemple de l’avion :
http://pstricks.blogspot.fr/2015/07/pst-crayon-dessiner-un-avion.html
\begin{pspicture}(-1,-0.2)(1,0.2)
\psCharPath[text=Agnès,file=agnes]
\end{pspicture}
Pour un tracé pas à pas, il faut définir un tableau : voir les différents exemples liés au package pst-crayon, celui d’Agnès est dans le sous-dossier (psCharPath/agnes-draw.tex) et celui pour l’obtention des données (psCharPath/aagnes-dat.tex) sont dans :
L'animation Gif obtenue :
La documentation au format pdf, ainsi que le fichier source (psCharPath/psCharPath-v2.pdf psCharPath/psCharPath-v2.tex) sont dans :
Ancienne version (psCharPath/psCharPath.pdf psCharPath/psCharPath.tex) au même endroit.
Le tracé pas à pas d'Enzo (/psCharPath/enzo-dat.tex /psCharPath/enzo-draw.tex) :
mercredi 15 juillet 2015
pst-crayon : le B Chancery
\documentclass{article}
\usepackage{pst-crayon}
% B majuscule en ZapfChancery
\def\Bzap{0.449792 0.0048739
0.493309 0.00478687
0.528731 0.00478687
0.559019 0.0046128
0.587218 0.00426467
0.616288 0.00365543
0.649361 0.00278509
0.68957 0.00156661
0.739789 0.0
0.909679 0.0
1.08444 -0.0048739
1.19515 -0.00661458
1.27949 -0.00792009
1.34259 -0.00887747
1.38932 -0.0094867
1.42483 -0.00983484
1.45416 -0.0100959
1.48236 -0.0100959
1.51439 -0.0100959
1.756 0.00261102
1.98176 0.0430818
2.20744 0.11445
2.44914 0.220022
2.60702 0.308797
2.74349 0.403054
2.85872 0.503056
2.95272 0.609064
3.02556 0.721425
3.07752 0.840487
3.10859 0.966512
3.11895 1.09976
3.10607 1.2096
3.06891 1.31256
3.0092 1.40525
2.92887 1.48445
2.84714 1.53946
2.75088 1.5801
2.62738 1.6103
2.46411 1.6345
2.63809 1.71944
2.78909 1.80944
2.91712 1.90439
3.02191 2.00422
3.10354 2.10866
3.16194 2.21771
3.19702 2.33121
3.20877 2.44914
3.19589 2.56428
3.1569 2.66254
3.09066 2.74436
2.99641 2.81033
2.87299 2.86072
2.71964 2.89614
2.53539 2.91712
2.31928 2.92399
2.24408 2.92399
2.28412 3.07891
1.87924 2.9038
1.60212 2.85628
1.37566 2.80075
1.18471 2.73304
1.01447 2.64897
0.866423 2.5534
0.737352 2.44687
0.627602 2.32973
0.537261 2.20222
0.466589 2.06462
0.415761 1.91727
0.385125 1.76044
0.374942 1.59446
0.376857 1.5204
0.38295 1.44877
0.393742 1.3687
0.409756 1.26965
0.809764 1.45451
0.782958 1.59446
0.767814 1.6862
0.761112 1.75452
0.759633 1.82423
0.764332 1.94225
0.778954 2.04956
0.803846 2.14722
0.839617 2.23608
0.886528 2.31719
0.945276 2.39152
1.01612 2.4601
1.09976 2.52399
1.25094 2.61537
1.41822 2.68143
1.60987 2.72503
1.83433 2.74888
1.46461 1.26965
1.42657 1.11612
1.39072 0.979306
1.35616 0.858155
1.32239 0.751713
1.28836 0.65876
1.25346 0.578515
1.21682 0.509845
1.17783 0.451706
1.13553 0.403054
1.08923 0.363019
1.03823 0.330468
0.981656 0.304358
0.918818 0.283818
0.848843 0.26763
0.771121 0.25501
0.684783 0.24474
0.449792 0.0048739
1.87924 1.45939
1.93851 1.46522
1.98559 1.46818
2.02702 1.46931
2.06932 1.46948
2.20901 1.4613
2.3319 1.43728
2.4373 1.39768
2.52477 1.3432
2.59361 1.27409
2.64357 1.19097
2.67386 1.09428
2.68413 0.984528
2.66959 0.838224
2.62843 0.690963
2.56376 0.553014
2.47908 0.434822
2.36584 0.332731
2.22972 0.259187
2.07202 0.214713
1.89421 0.19983
1.84538 0.200352
1.79342 0.202267
1.73354 0.205922
1.66122 0.211754
1.57175 0.220109
1.46052 0.23151
1.323 0.246306
1.15442 0.264931
1.3197 0.414456
1.45173 0.542048
1.55547 0.655279
1.63615 0.761634
1.69882 0.868686
1.74843 0.984006
1.79029 1.11517
1.82945 1.26965
1.87924 1.45939
2.20927 2.78404
2.35679 2.77987
2.45297 2.77282
2.5172 2.76011
2.56924 2.73913
2.65375 2.68195
2.71833 2.59718
2.75941 2.49083
2.77395 2.36907
2.75497 2.19813
2.70093 2.03607
2.61589 1.89186
2.50414 1.77445
2.38525 1.69708
2.25418 1.64381
2.10057 1.61196
1.9144 1.59934
2.20927 2.78404
}
% nbre points = 166
\pagestyle{empty}
\begin{document}
\begin{center}
\multido{\i=0+2}{109}{%
\begin{pspicture}(-4,-3)(6,8)
\psframe(-4,-3)(6,8)
\psset{lightsrc=viewpoint,viewpoint=100 20 50 rtp2xyz,Decran=60,solidmemory}
\psSolid[object=grille,base=-5 3 -3 7,ngrid=8 10](0,0,0)
\psSolid[object=plan,definition=equation,args={[0 0 1 0] 90},name=P0,base=-4 4 -4 6,action=none]
\pstVerb{/tabC [\Bzap] def /II \i\space 2 add def }%
\psProjection[object=line,plan=P0,linecolor=blue,args=tabC 0 II getinterval aload pop]
\psCrayonH[RotX=20,pencolor=blue,grid,unit=0.5](tabC II 1 sub get neg 2 mul,tabC II 2 sub get 2 mul,0)
\end{pspicture}\newpage}
\multido{\i=0+2}{38}{%
\begin{pspicture}(-4,-3)(6,8)
\psframe(-4,-3)(6,8)
\psset{lightsrc=viewpoint,viewpoint=100 20 50 rtp2xyz,Decran=60,solidmemory}
\psSolid[object=grille,base=-5 3 -3 7,ngrid=8 10](0,0,0)
\psSolid[object=plan,definition=equation,args={[0 0 1 0] 90},name=P0,base=-4 4 -4 4,action=none]
\psProjection[object=line,plan=P0,linecolor=blue,args=tabC 0 218 getinterval aload pop]
\pstVerb{/tabC [\Bzap] def /II \i\space 2 add def }%
\psProjection[object=line,plan=P0,linecolor=blue,args=tabC 218 II getinterval aload pop]
\psCrayonH[RotX=20,pencolor=blue,grid,unit=0.5](tabC 218 II 1 sub add get neg 2 mul,tabC 218 II 2 sub add get 2 mul,0)
\end{pspicture}\newpage}
\multido{\i=0+2}{18}{%
\begin{pspicture}(-4,-3)(6,8)
\psframe(-4,-3)(6,8)
\psset{lightsrc=viewpoint,viewpoint=100 20 50 rtp2xyz,Decran=60,solidmemory}
\psSolid[object=grille,base=-5 3 -3 7,ngrid=8 10](0,0,0)
\psSolid[object=plan,definition=equation,args={[0 0 1 0] 90},name=P0,base=-4 4 -4 4,action=none]
\pstVerb{/tabC [\Bzap] def /II \i\space 2 add def }%
\psProjection[object=line,plan=P0,linecolor=blue,args=tabC 0 218 getinterval aload pop]
\psProjection[object=line,plan=P0,linecolor=blue,args=tabC 218 76 getinterval aload pop]
\psProjection[object=line,plan=P0,linecolor=blue,args=tabC 294 II getinterval aload pop]
\psCrayonH[RotX=20,pencolor=blue,grid,unit=0.5](tabC 294 II 1 sub add get neg 2 mul,tabC 294 II 2 sub add get 2 mul,0)
\end{pspicture}\newpage}
\multido{\i=0+1}{5}{%
\begin{pspicture}(-4,-3)(6,8)
\psframe(-4,-3)(6,8)
\psset{lightsrc=viewpoint,viewpoint=100 20 50 rtp2xyz,Decran=60,solidmemory}
\psSolid[object=grille,base=-5 3 -3 7,ngrid=8 10](0,0,0)
\pstVerb{/tabC [\Bzap] def}%
\psSolid[object=plan,definition=equation,args={[0 0 1 0] 90},name=P0,base=-4 4 -4 4,action=none]
\psProjection[object=line,plan=P0,linecolor=blue,args=tabC 0 218 getinterval aload pop]
\psProjection[object=line,plan=P0,linecolor=blue,args=tabC 218 76 getinterval aload pop]
\psProjection[object=line,plan=P0,linecolor=blue,args=tabC 294 36 getinterval aload pop]
\psCrayonH[RotY=90,pencolor=blue,grid,unit=0.5](tabC 294 36 1 sub add get neg 2 mul 10 sub,tabC 294 36 2 sub add get 2 mul 8 sub,0)
\end{pspicture}\newpage}
\multido{\i=0+1}{5}{%
\begin{pspicture}(-4,-3)(6,8)
\psframe(-4,-3)(6,8)
\psset{lightsrc=viewpoint,viewpoint=100 20 50 rtp2xyz,Decran=60,solidmemory}
\psSolid[object=grille,base=-5 3 -3 7,ngrid=8 10](0,0,0)
\pstVerb{/tabC [\Bzap] def}%
\psSolid[object=plan,definition=equation,args={[0 0 1 0] 90},name=P0,base=-4 4 -4 4,action=none]
\psProjection[object=texte,PSfont=ZapfChancery, % Palatino-Italic,
fontsize=141.7322834646,linecolor=red,
text=B,
pos=ur,
plan=P0](0.3,-0.1)%
\psProjection[object=line,plan=P0,linecolor=blue,args=tabC 0 218 getinterval aload pop]
\psProjection[object=line,plan=P0,linecolor=blue,args=tabC 218 76 getinterval aload pop]
\psProjection[object=line,plan=P0,linecolor=blue,args=tabC 294 36 getinterval aload pop]
\psCrayonH[RotY=90,pencolor=blue,grid,unit=0.5](tabC 294 36 1 sub add get neg 2 mul 10 sub,tabC 294 36 2 sub add get 2 mul 8 sub,0)
\psCrayonH[RotY=90,pencolor=red,grid,unit=0.5](tabC 294 36 1 sub add get neg 2 mul 10 sub,tabC 294 36 2 sub add get 2 mul 5 sub,0)
\end{pspicture}\newpage}
\end{center}
\end{document}
jeudi 9 juillet 2015
pst-crayon : dessiner le B
Pour calculer les images :
\documentclass{article}
\usepackage{pst-crayon}
% B en Times-Bold
\def\BTimesBold{0.0800713 0.0 1.6895 0.0 1.9923 0.0171457 2.26523 0.0673643 2.50493 0.148393 2.70841 0.258056 2.87221 0.39409 2.99319 0.554581 3.06812 0.737091 3.09388 0.939619 3.0763 1.10629 3.02452 1.26025 2.93992 1.40003 2.82408 1.52449 2.69083 1.62614 2.54218 1.70439 2.36071 1.76757 2.1292 1.82423 2.32981 1.88986 2.49805 1.96035 2.63548 2.03755 2.74409 2.12285 2.82538 2.21806 2.88135 2.32468 2.91355 2.44444 2.92399 2.57899 2.90258 2.76115 2.83896 2.92112 2.73417 3.0582 2.58909 3.17187 2.40458 3.26134 2.18168 3.32609 1.92128 3.36534 1.6244 3.37866 0.0800713 3.37866 0.0800713 3.25368 0.294175 3.22565 0.429165 3.16438 0.499488 3.05907 0.519767 2.89893 0.519767 0.479731 0.515763 0.392958 0.50236 0.322374 0.476772 0.265976 0.436737 0.221763 0.379468 0.187558 0.302617 0.161448 0.20366 0.141256 0.0800713 0.124981 0.0800713 0.0 1.31944 1.71422 1.46948 1.71422 1.65016 1.70169 1.80613 1.66418 1.93772 1.60116 2.04495 1.51256 2.12807 1.39785 2.18716 1.25686 2.22259 1.08923 2.23434 0.894709 2.19595 0.575208 2.08116 0.345351 1.89047 0.206358 1.6244 0.159794 1.54807 0.163798 1.48393 0.176505 1.43119 0.198263 1.38941 0.22977 1.3579 0.271546 1.33615 0.324289 1.32344 0.388433 1.31944 0.464761 1.31944 1.71422 1.31944 2.98387 1.32283 3.04602 1.33345 3.09806 1.35207 3.14045 1.3794 3.17387 1.41613 3.19885 1.46287 3.21591 1.52048 3.22574 1.58959 3.22896 1.81675 3.18797 1.97558 3.06264 2.0688 2.84923 2.09926 2.54418 2.09117 2.3648 2.06453 2.2185 2.01597 2.10222 1.94182 2.01292 1.83859 1.94747 1.70282 1.90291 1.53093 1.87619 1.31944 1.86427 1.31944 2.98387}
% on prend un point sur 2
\pagestyle{empty}
\begin{document}
\begin{center}
\psset{RotSequence=yxz}
\multido{\i=0+2}{50}{%
\begin{pspicture}(-3,-3)(6,6)
\psframe(-3,-3)(6,6)
\psset{lightsrc=viewpoint,viewpoint=100 20 20 rtp2xyz,Decran=60,solidmemory}
\psSolid[object=grille,base=-9 3 -2 8,ngrid=12 10,linewidth=0.01,linecolor=blue,RotY=90](0,0,0)
\psSolid[object=plan,definition=equation,args={[1 0 0 0] 90},name=P0,base=-4 4 -4 4,action=none]
\pstVerb{/tabC [\BTimesBold] {2 mulv} papply def /II \i\space 2 add def }%
\psProjection[object=line,plan=P0,linewidth=0.05,linecolor=blue,args=tabC 0 II getinterval aload pop]
\psCrayonC[RotY=90,RotX=10,pencolor=blue,grid,h=10,r=0.5](0,tabC II 2 sub get,tabC II 1 sub get)
\end{pspicture}\newpage}
\multido{\i=0+2}{23}{%
\begin{pspicture}(-3,-3)(6,6)
\psframe(-3,-3)(6,6)
\psset{lightsrc=viewpoint,viewpoint=100 20 20 rtp2xyz,Decran=60,solidmemory}
\psSolid[object=grille,base=-9 3 -2 8,ngrid=12 10,linewidth=0.01,linecolor=blue,RotY=90](0,0,0)
\psSolid[object=plan,definition=equation,args={[1 0 0 0] 90},name=P0,base=-4 4 -4 4,action=none]
\psProjection[object=line,plan=P0,linewidth=0.05,linecolor=blue,args=tabC 0 100 getinterval aload pop]
\pstVerb{/tabC [\BTimesBold] {2 mulv} papply def /II \i\space 2 add def }%
\psProjection[object=line,plan=P0,linewidth=0.05,linecolor=blue,args=tabC 100 II getinterval aload pop]
\psCrayonC[RotY=90,RotX=10,pencolor=blue,grid,h=10,r=0.5](0,tabC 100 II 2 sub add get,tabC 100 II 1 sub add get)
\end{pspicture}\newpage}
\multido{\i=0+2}{22}{%
\begin{pspicture}(-3,-3)(6,6)
\psframe(-3,-3)(6,6)
\psset{lightsrc=viewpoint,viewpoint=100 20 20 rtp2xyz,Decran=60,solidmemory}
\psSolid[object=grille,base=-9 3 -2 8,ngrid=12 10,linewidth=0.01,linecolor=blue,RotY=90](0,0,0)
\psSolid[object=plan,definition=equation,args={[1 0 0 0] 90},name=P0,base=-4 4 -4 4,action=none]
\psProjection[object=line,plan=P0,linewidth=0.05,linecolor=blue,args=tabC 0 100 getinterval aload pop]
\psProjection[object=line,plan=P0,linewidth=0.05,linecolor=blue,args=tabC 100 46 getinterval aload pop]
\pstVerb{/tabC [\BTimesBold] {2 mulv} papply def /II \i\space 2 add def }%
\psProjection[object=line,plan=P0,linewidth=0.05,linecolor=blue,args=tabC 146 II getinterval aload pop]
\psCrayonC[RotY=90,RotX=10,pencolor=blue,grid,h=10,r=0.5](0,tabC 146 II 2 sub add get,tabC 146 II 1 sub add get)
\end{pspicture}\newpage}
\multido{\i=0+1}{3}{
\begin{pspicture}(-3,-3)(6,6)
\psframe(-3,-3)(6,6)
\psset{lightsrc=viewpoint,viewpoint=100 20 20 rtp2xyz,Decran=60,solidmemory}
\psSolid[object=grille,base=-9 3 -2 8,ngrid=12 10,linewidth=0.01,linecolor=blue,RotY=90](0,0,0)
\pstVerb{/tabC [\BTimesBold] {2 mulv} papply def}%
\psSolid[object=plan,definition=equation,args={[1 0 0 0] 90},name=P0,base=-4 4 -4 4,action=none]
\psProjection[object=line,plan=P0,linewidth=0.05,linecolor=blue,args=tabC 0 100 getinterval aload pop]
\psProjection[object=line,plan=P0,linewidth=0.05,linecolor=blue,args=tabC 100 46 getinterval aload pop]
\psProjection[object=line,plan=P0,linewidth=0.05,linecolor=blue,args=tabC 146 44 getinterval aload pop]
\end{pspicture}\newpage}
\multido{\i=0+1}{3}{
\begin{pspicture}(-3,-3)(6,6)
\psframe(-3,-3)(6,6)
\psset{lightsrc=viewpoint,viewpoint=100 20 20 rtp2xyz,Decran=60,solidmemory}
\psSolid[object=grille,base=-9 3 -2 8,ngrid=12 10,linewidth=0.01,linecolor=blue,RotY=90](0,0,0)
\pstVerb{/tabC [\BTimesBold] {2 mulv} papply def}%
\psSolid[object=plan,definition=equation,args={[1 0 0 0] 90},name=P0,base=-4 4 -4 4,action=none]
\psProjection[object=texte,PSfont=Times-Bold,% ZapfChancery, % Palatino-Italic, % ZapfDingbats, %
fontsize=142.2637 2 mul,linecolor={[rgb]{1 1 0.5}},
text=B,
pos=ur,
plan=P0](0.05,-0.1)%
\psProjection[object=line,plan=P0,linewidth=0.05,linecolor=blue,args=tabC 0 100 getinterval aload pop]
\psProjection[object=line,plan=P0,linewidth=0.05,linecolor=blue,args=tabC 100 46 getinterval aload pop]
\psProjection[object=line,plan=P0,linewidth=0.05,linecolor=blue,args=tabC 146 44 getinterval aload pop]
\end{pspicture}\newpage}
\end{center}
\end{document}
mardi 7 juillet 2015
pst-crayon : dessiner un avion
\documentclass{article}
\usepackage{pst-crayon}
\def\avion{0.174764 1.73441 0.349877 1.66444 0.18486 1.0747 0.439696 1.10951 0.809764 1.60456 1.01073 1.58454 1.22204 1.56505 1.39585 1.55016 1.48445 1.54433 1.57845 1.54268 1.64964 1.5412 1.70178 1.53954 1.73859 1.53754 1.76392 1.53484 1.78159 1.5311 1.79542 1.52614 1.80926 1.51961 1.86105 1.47566 1.87924 1.4096 1.87602 1.366 1.86122 1.29393 1.82658 1.15712 1.76435 0.919775 1.32953 -0.0651014 1.51439 -0.0651014 1.57244 -0.0602275 1.61883 -0.0406449 1.66418 0.000348136 1.71944 0.0699753 1.9144 0.345003 2.21937 0.345003 2.2413 0.351791 2.26053 0.369807 2.27402 0.395308 2.27925 0.424726 2.27402 0.457015 2.26053 0.48417 2.2413 0.502708 2.21937 0.509671 2.05435 0.509671 2.29909 0.859548 2.59918 0.859548 2.62112 0.866423 2.64035 0.885136 2.65384 0.912203 2.65906 0.944493 2.65375 0.974694 2.63965 1.00211 2.61894 1.02204 2.59396 1.02979 2.43904 1.02979 2.80911 1.52449 2.85402 1.52936 3.1367 1.54216 3.31373 1.5526 3.43454 1.56391 3.5489 1.57949 3.65403 1.60438 3.73437 1.64007 3.78563 1.68419 3.80373 1.73441 3.76335 1.79969 3.6462 1.85182 3.45777 1.8889 3.2039 1.90918 2.85402 1.92415 2.80911 1.92937 2.43904 2.42407 2.59396 2.42407 2.61894 2.43173 2.63965 2.45218 2.65375 2.48099 2.65906 2.51424 2.65384 2.54339 2.64035 2.56898 2.62112 2.58709 2.59918 2.59396 2.29909 2.59396 2.05435 2.94384 2.21937 2.94384 2.2413 2.95071 2.26053 2.96943 2.27402 2.99649 2.27925 3.02878 2.27402 3.05811 2.26053 3.08379 2.2413 3.10189 2.21937 3.10885 1.9144 3.10885 1.71944 3.38388 1.66418 3.45621 1.61883 3.49877 1.57244 3.51878 1.51439 3.52383 1.32953 3.52383 1.76435 2.53408 1.82658 2.30074 1.86122 2.16358 1.87602 2.08916 1.87924 2.04425 1.86792 1.98881 1.83363 1.9493 1.77593 1.92476 1.69438 1.9144 1.52936 1.90918 1.47209 1.90883 1.41952 1.90665 1.34807 1.90074 1.23449 1.88933 0.98975 1.86949 0.809764 1.8493 0.439696 2.344 0.18486 2.37916 0.349877 1.78942 0.174764 1.73441}
\def\projPolygon{%
% il y a un bug dans la définition de /proj-pst-polygone dans pst-solides3d.pro,
% d'où cette nouvelle définition
/proj-pst-polygone {
proj-action (none) eqstring not {
l@pl@n plangetrange aload pop
setyrange setxrange
% newpath
% xmin ymin l@pl@n pointplan smoveto
% xmin ymax l@pl@n pointplan slineto
% xmax ymax l@pl@n pointplan slineto
% xmax ymin l@pl@n pointplan slineto
% xmin ymin l@pl@n pointplan slineto
% planprojpst projpath
% clip
solidlinewidth setlinewidth
linestyle
linecolor
proj-definition length 0 eq {
[proj-args]
} {
proj-args
} ifelse
proj-definition cvx exec polygone_
planprojpst projectionsifacevisible projpath
} if
/projname where {
pop
proj-definition length 0 eq {
[proj-args]
} {
proj-args
} ifelse
proj-definition cvx exec projname cvlit exch def
/projname where pop /projname undef
} if
} def
}
\pagestyle{empty}
\begin{document}
\begin{center}
\psset{RotSequence=zyx}
\multido{\i=0+4}{58}{% 115 points => 230 éléments 4 x 57 =228
\begin{pspicture}(-1,-4)(12,7)
\psframe[fillstyle=solid,fillcolor=cyan!20](-1,-4)(12,7)
\psset{lightsrc=viewpoint,viewpoint=100 20 30 rtp2xyz,Decran=60,solidmemory}
\psSolid[object=grille,base=-8 1 0 10,ngrid=16 17,linewidth=0.01,linecolor=blue](0,0,0)
\psSolid[object=plan,definition=equation,args={[0 0 1 0] 90},name=P0,base=-4 4 -4 6,action=none]
\pstVerb{/tabC [\avion] {2 mulv} papply def /II \i\space 2 add def }%
\psProjection[object=line,plan=P0,linewidth=0.06,args=tabC 0 II getinterval aload pop]
\psCrayonH[RotY=40,RotX=-10,RotZ=20,pencolor=black,grid,h=15,r=0.4,colorpencilbody=gray,colorbody](tabC II 1 sub get neg,tabC II 2 sub get,0)
\end{pspicture}\newpage}
\multido{\i=0+1}{11}{%
\begin{pspicture}(-1,-4)(12,7)
\psframe[fillstyle=solid,fillcolor=cyan!20](-1,-4)(12,7)
\psset{lightsrc=viewpoint,viewpoint=100 20 30 rtp2xyz,Decran=60,solidmemory}
\psSolid[object=grille,base=-8 1 0 10,ngrid=16 17,linewidth=0.01,linecolor=blue](0,0,0)
\codejps{\projPolygon}
\psSolid[object=plan,definition=equation,args={[0 0 1 -\i\space 2 div] 90},name=P0,base=-4 4 -4 6,action=none]
\pstVerb{/tabC [\avion] {2 mulv} papply def}%
\psProjection[object=polygone,plan=P0,linewidth=0.06,args=tabC 0 228 getinterval {\i\space 0 addv} papply aload pop,fillstyle=solid,fillcolor=blue](\i,0)
\end{pspicture}\newpage}
\end{center}
\end{document}
pst-crayon : dessin du a minuscule en Times-Bold
Avec le package animate d'Alexander Grahn :
http://manuel.luque.perso.neuf.fr/pst-crayon/pst-crayon-v2/animate-a-pst-crayon.tex
http://manuel.luque.perso.neuf.fr/pst-crayon/pst-crayon-v2/animate-a-pst-crayon.pdf
Rappel : le package est ici :
Le listing pour créer les images en vue du Gif animé.
\documentclass{article}
\usepackage{pst-crayon}
% a minuscule en Times-Bold
\def\aminusculeTimesBold{2.36542 0.320129 2.31547 0.270185 2.29163 0.254404 2.26033 0.250068 2.21454 0.257612 2.18177 0.28059 2.16209 0.319522 2.15558 0.374929 2.15558 1.68042 2.13798 1.83181 2.08665 1.96664 2.00306 2.08379 1.88921 2.1822 1.74675 2.26067 1.57741 2.31808 1.38301 2.35337 1.16537 2.36542 0.962382 2.35389 0.779079 2.32033 0.617714 2.26622 0.480627 2.19287 0.3699 2.10165 0.288047 1.99404 0.237322 1.87135 0.219894 1.73522 0.225443 1.66074 0.241831 1.5951 0.268624 1.53856 0.305562 1.49157 0.352038 1.45437 0.407705 1.4274 0.472217 1.41093 0.545225 1.40538 0.617107 1.41084 0.682572 1.42671 0.740494 1.45229 0.790091 1.48662 0.830238 1.52885 0.860065 1.57828 0.878708 1.63403 0.885124 1.69533 0.864488 1.79904 0.795294 1.91037 0.748384 1.97289 0.735291 2.02032 0.759136 2.09359 0.825208 2.15229 0.92501 2.19131 1.05022 2.20553 1.24028 2.18029 1.37087 2.10174 1.44604 1.96491 1.47024 1.76539 1.47024 1.40017 1.09219 1.28008 0.816971 1.1821 0.615806 1.09435 0.460251 1.00513 0.312846 0.887639 0.208101 0.758963 0.145584 0.61702 0.124861 0.460251 0.165874 0.248594 0.28059 0.0806393 0.456262 -0.0301747 0.680144 -0.0700608 0.885124 -0.0505513 1.07892 0.0112722 1.27081 0.119832 1.47024 0.279896 1.52313 0.117664 1.60411 0.00927785 1.72074 -0.0512449 1.88054 -0.0700608 2.03202 -0.0543665 2.16989 -0.00442215 2.30299 0.0839342 2.44033 0.215038 2.36542 0.320129 1.46538 0.500137 1.36965 0.401115 1.28208 0.334436 1.19728 0.296891 1.11022 0.285099 1.05611 0.291255 1.00695 0.309291 0.963509 0.338338 0.926398 0.37753 0.89631 0.426174 0.873939 0.483315 0.860065 0.54826 0.855296 0.620142 0.894315 0.822174 1.01025 0.992036 1.20118 1.12722 1.46538 1.22537 1.46538 0.500137}
% 97 points
% on prend un point sur 2
\pagestyle{empty}
\begin{document}
\begin{center}
\psset{RotSequence=yxz}
\multido{\i=0+4}{40}{%
\begin{pspicture}(-6,-3)(7,6)
\psframe(-6,-3)(7,6)
\psset{lightsrc=viewpoint,viewpoint=100 20 50 rtp2xyz,Decran=60,solidmemory}
\psSolid[object=grille,base=-5 3 -3 7,ngrid=8 10,linewidth=0.01,linecolor=blue](0,0,0)
\psSolid[object=plan,definition=equation,args={[0 0 1 0] 90},name=P0,base=-4 4 -4 6,action=none]
\pstVerb{/tabC [\aminusculeTimesBold] {2 mulv} papply def /II \i\space 2 add def }%
\psProjection[object=line,plan=P0,linewidth=0.05,linecolor=red,args=tabC 0 II getinterval aload pop]
\psCrayonH[RotY=30,RotX=10,pencolor=red,grid,h=20,r=0.5](tabC II 1 sub get neg,tabC II 2 sub get,0)
\end{pspicture}\newpage}
\multido{\i=0+2}{18}{%
\begin{pspicture}(-6,-3)(7,6)
\psframe(-6,-3)(7,6)
\psset{lightsrc=viewpoint,viewpoint=100 20 50 rtp2xyz,Decran=60,solidmemory}
\psSolid[object=grille,base=-5 3 -3 7,ngrid=8 10,linewidth=0.01,linecolor=blue](0,0,0)
\psSolid[object=plan,definition=equation,args={[0 0 1 0] 90},name=P0,base=-4 4 -4 4,action=none]
\psProjection[object=line,plan=P0,linewidth=0.05,linecolor=red,args=tabC 0 158 getinterval aload pop]
\pstVerb{/tabC [\aminusculeTimesBold] {2 mulv} papply def /II \i\space 2 add def }%
\psProjection[object=line,plan=P0,linewidth=0.05,linecolor=red,args=tabC 158 II getinterval aload pop]
\psCrayonH[RotY=30,RotX=10,pencolor=red,grid,h=20,r=0.5](tabC 158 II 1 sub add get neg,tabC 158 II 2 sub add get,0)
\end{pspicture}\newpage}
\multido{\i=0+1}{5}{
\begin{pspicture}(-6,-3)(7,6)
\psframe(-6,-3)(7,6)
\psset{lightsrc=viewpoint,viewpoint=100 20 50 rtp2xyz,Decran=60,solidmemory}
\psSolid[object=grille,base=-5 3 -3 7,ngrid=8 10,linewidth=0.01,linecolor=blue](0,0,0)
\psSolid[object=plan,definition=equation,args={[0 0 1 0] 90},name=P0,base=-4 4 -4 4,action=none]
\psProjection[object=texte,PSfont=Times-Bold,% ZapfChancery, % Palatino-Italic,
fontsize=142.2637 2 mul,linecolor=red,
text=a,
pos=ur,
plan=P0](0.05,-0.18)%
\end{pspicture}\newpage}
\end{center}
\end{document}
Inscription à :
Articles (Atom)













