lundi 6 avril 2015

Œuf de Pâques à pois

C'est encore la suite de différents modèles d’œufs, celui-ci est un œuf à pois rouges et bleus.
Il nécessite le package pst-egg décrit dans les précédents articles :


 http://pstricks.blogspot.fr/2015/01/dessiner-un-oeuf-avec-pstricks.html
 http://pstricks.blogspot.fr/2015/01/dessiner-un-uf-avec-pstricks-avec-le.html
 http://pstricks.blogspot.fr/2015/03/faire-luf-avec-pstricks-suite.html

\documentclass{article}
\usepackage{pst-egg}
\definecolor{coquille}{rgb}{0.984 0.95 0.718}
\begin{document}
\begin{center}
\begin{pspicture}(-3,-4)(3,4)
\psframe[fillstyle=hlines,hatchangle=0](-3,-4)(3,4)
\psset{viewpoint=100 30 10 rtp2xyz,Decran=150,lightsrc=viewpoint,solidmemory,RotX=-30}
\pstegg[fillcolor=coquille,grid,ngrid=24 36]
\pstegg[fillcolor=coquille,grid,ngrid=18 20,name=oeuf,action=none]
\codejps{
% projection sur la face n°i
% coordonnées du centre et rayon du cercle
0 1 oeuf solidnombrefaces 1 sub {/i exch def % numero de la face
oeuf i solidgetsommetsface /TAB exch def
TAB 0 3 getinterval aload pop % sommet n°0 x0 y0 z0
TAB 3 3 getinterval aload pop % sommet n°1 x1 y1 z1
distance3d /Rayon exch 2.65 div def % distance entre les 2 sommets /2.65
0 360 0 0 Rayon Cercle_ oeuf i projpath
i 2 modulo 0 eq {(red) cvx exec}{(blue) cvx exec}ifelse
fill
} for
}%
\end{pspicture}
\end{center}
\end{document}

Avec les couleurs inversées :
\begin{pspicture}(-3,-4)(3,4)
\psframe*(-3,-4)(3,4)
\psframe[fillstyle=hlines,hatchangle=0,hatchcolor=white](-3,-4)(3,4)
\psset{viewpoint=100 30 10 rtp2xyz,Decran=150,lightsrc=viewpoint,solidmemory,RotY=30}
\pstegg[fillcolor=inversecoquille,grid,ngrid=24 36]
\pstegg[ngrid=18 20,name=oeuf,action=none]
\codejps{
% projection sur la face n°i
% coordonnées du centre et rayon du cercle
0 1 oeuf solidnombrefaces 1 sub {/i exch def % numero de la face
oeuf i solidgetsommetsface /TAB exch def
TAB 0 3 getinterval aload pop % sommet n°0 x0 y0 z0
TAB 3 3 getinterval aload pop % sommet n°1 x1 y1 z1
distance3d /Rayon exch 2.65 div def % distance entre les 2 sommets /2.65
0 360 0 0 Rayon Cercle_ oeuf i projpath
i 2 modulo 0 eq {(cyan) cvx exec}{(yellow) cvx exec}ifelse
fill
} for
}%
\end{pspicture}

Voici une version avec des pois en forme d'ellipse pour s'adapter un peu mieux au maillage du solide :
\begin{center}
\begin{pspicture}(-3,-4)(3,4)
\psframe(-3,-4)(3,4)
%\psframe[fillstyle=hlines,hatchangle=0,hatchcolor=white](-3,-4)(3,4)
\psset{viewpoint=100 30 10 rtp2xyz,Decran=150,lightsrc=viewpoint,solidmemory}
\pstegg[fillcolor=inversecoquille,grid,ngrid=24 36]
\pstegg[ngrid=18 20,name=oeuf,action=none]
\codejps{
%% syntaxe : x0 y0 a b Ellipse_ : demi-petit axe et demi-grand axe cente de l'ellipse
/Ellipse_ {
4 dict begin
   /b exch def
   /a exch def
   /y0 exch def
   /x0 exch def
   0 360 {cos a mul x0 add} {sin b mul y0 add} Courbeparam_
end
} def
0 1 oeuf solidnombrefaces 1 sub {/i exch def % numero de la face
oeuf i solidgetsommetsface /TAB exch def
oeuf i solidcentreface /G defpoint3d
% premier côté
TAB 0 3 getinterval aload pop /A0 defpoint3d % sommet n°0 x0 y0 z0
TAB 3 3 getinterval aload pop /A1 defpoint3d % sommet n°1 x1 y1 z1
 A0 G vecteur3d /V1 defpoint3d % A0G
 A0 A1 vecteur3d unitaire3d /U1 defpoint3d % vecteur unitaire A1A2
 V1 U1 vectprod3d norme3d /d1 exch 1 mul def
% deuxième côté
%TAB 3 3 getinterval aload pop defpoint3d /A1 % sommet n°0 x0 y0 z0
TAB 6 3 getinterval aload pop /A2 defpoint3d % sommet n°2 x2 y2 z2
 A2 G vecteur3d /V2 defpoint3d % A2G
 A1 A2 vecteur3d unitaire3d /U2 defpoint3d % vecteur unitaire A1A2
 V2 U2 vectprod3d norme3d /d2 exch 1 mul def
 0 0 d2 d1 Ellipse_ oeuf i projpath
i 2 modulo 0 eq {(cyan) cvx exec}{(yellow) cvx exec}ifelse
fill
} for
}%
\end{pspicture}
\end{center}

Aucun commentaire:

Enregistrer un commentaire