jeudi 9 avril 2015

Solides avec décor à pois de couleur - version 2

C'est la suite de :
http://pstricks.blogspot.fr/2015/04/solides-avec-decor-pois-de-couleur.html

Cette version permet de mieux adapter la forme des pois au maillage du solide en dessinant une ellipse au lieu d'un cercle. Les paramètres de l'ellipse : demi grand axe et demi petit axe pourront être ajuster avec le coefficient de mul dans :
d1 exch 0.75 mul def
d2 exch 0.75 mul def

Les divers exemples deviennent :

 \documentclass{article}
\usepackage{pst-solides3d}
\begin{document}
\begin{center}
\begin{pspicture}(-5,-5)(5,5)
\psframe(-5,-5)(5,5)
\psset{viewpoint=100 30 50 rtp2xyz,Decran=100,lightsrc=viewpoint,solidmemory}
%\psSolid[object=grille,base=-4 4 -4 4]%
\psSolid[object=tore,
        r1=3,r0=1.5,grid,
        fillcolor=blue,
        ngrid=24 60]
\psSolid[object=tore,
        r1=3,r0=1.5,
        action=none,name=torepois,
        ngrid=18 36]
\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 torepois solidnombrefaces 1 sub {/i exch def % numero de la face
torepois i solidgetsommetsface /TAB exch def
torepois 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 0.8 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 0.8 mul def
 0 0 d2 d1 Ellipse_ torepois i projpath
i 2 modulo 0 eq {(magenta) cvx exec}{(yellow) cvx exec}ifelse
fill
} for
}%
\end{pspicture}
\end{center}
\end{document}

 \documentclass{article}
\usepackage{pst-solides3d}
\definecolor{coquille}{rgb}{0.984 0.95 0.718}
\begin{document}
\begin{center}
\begin{pspicture}(-5,-3)(5,5)
\psframe(-5,-3)(5,5)
\pstVerb{/hauteur 5 def /rayon 3 def /angleT 50 def}%
\psset{viewpoint=20 angleT 30 rtp2xyz,Decran=15,lightsrc=15 30 30 rtp2xyz,solidmemory}
\psSolid[object=grille,base=-4 4 -4 4,linewidth=0.02,opacity=0.5](0,0,0)
\psSolid[object=cone,
         h=hauteur,r=rayon,grid,
         fillcolor=coquille,
        ngrid=1 72]
\psSolid[object=cone,
         h=hauteur,r=rayon,grid,
         hue=0 1 0.8 1,action=none,name=conepois,
        ngrid=18 40]
\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 conepois solidnombrefaces 1 sub {/i exch def % numero de la face
conepois i solidgetsommetsface /TAB exch def
conepois 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 0.8 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 0.8 mul def
 0 0 d2 d1 Ellipse_ conepois i projpath
i 2 modulo 0 eq {(red) cvx exec}{(blue) cvx exec}ifelse
fill
} for
}%
\psSolid[object=plan,definition=normalpoint,args={0 0 0 [0 0 1]},
         action=none,
         base=-4 4 -4 4,
         name=monplanB]
\psset{plan=monplanB}
\psProjection[object=cercle,linewidth=0.05,
              args=0 0 rayon,range=-90 angleT add 90 angleT add]
\psPoint(angleT sin rayon mul,angleT cos rayon mul neg,0){A}
\psPoint(0,0,hauteur){H}
\psPoint(angleT sin rayon mul neg,angleT cos rayon mul,0){B}
\psline[linewidth=0.05](B)(H)(A)
\end{pspicture}
\end{center}
\end{document}

\documentclass{article}
\usepackage{pst-solides3d}
\definecolor{coquille}{rgb}{0.984 0.95 0.718}
\begin{document}
\begin{center}
\begin{pspicture}(-5,-4)(5,5)
\psframe(-5,-4)(5,5)
\pstVerb{/hauteur 5 def /rayon 2 def /angleT 50 def}%
\psset{viewpoint=15 angleT 30 rtp2xyz,Decran=12,lightsrc=viewpoint,solidmemory}
\psSolid[object=grille,base=-4 4 -4 4]%
\psSolid[object=cylindre,
        h=hauteur,r=rayon,grid,
        fillcolor=coquille,
        ngrid=10 50](0,0,0)
\psSolid[object=cylindre,
        h=hauteur,r=rayon,grid,
        fillcolor=coquille,
        ngrid=4 20,name=cylindrepois,action=none](0,0,0)
\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
1 1 cylindrepois solidnombrefaces 1 sub {/i exch def % numero de la face
cylindrepois i solidgetsommetsface /TAB exch def
cylindrepois 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 0.8 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 0.8 mul def
 0 0 d2 d1 Ellipse_ cylindrepois i projpath
i 2 modulo 0 eq {(red) cvx exec}{(blue) cvx exec}ifelse
fill
} for
}%
\psSolid[object=plan,definition=normalpoint,args={0 0 hauteur [0 0 1]},
         action=none,
         base=-4 4 -4 4,
         name=monplanH]
\psset{plan=monplanH}
\psProjection[object=cercle,linewidth=0.05,
              args=0 0 rayon]
\psSolid[object=plan,definition=normalpoint,args={0 0 0 [0 0 1]},
         action=none,
         base=-4 4 -4 4,
         name=monplanB]
\psset{plan=monplanB}
\psProjection[object=cercle,linewidth=0.05,
              args=0 0 rayon,range=-90 angleT add 90 angleT add]
\psPoint(angleT sin rayon mul,angleT cos rayon mul neg,0){A}
\psPoint(angleT sin rayon mul,angleT cos rayon mul neg,hauteur){B}
\psline[linewidth=0.05](A)(B)
\psPoint(angleT sin rayon mul neg,angleT cos rayon mul,0){C}
\psPoint(angleT sin rayon mul neg,angleT cos rayon mul,hauteur){D}
\psline[linewidth=0.05](C)(D)
\end{pspicture}
\end{center}
\end{document}
\documentclass{article}
\usepackage{pst-solides3d}
\begin{document}
\begin{center}
\begin{pspicture}(-3,-3)(3,3)
\psframe*[linecolor=cyan!20](-3,-3)(3,3)
\psframe[fillstyle=hlines,hatchangle=0](-3,-3)(3,3)
\psset{viewpoint=10 30 30 rtp2xyz,solidmemory, Decran=10,lightsrc=viewpoint}
\psSolid[object=sphere,r=2.5,ngrid=18 36,fillcolor=white,name=sph1,linewidth=0.02]
\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 sph1 solidnombrefaces 1 sub {/i exch def % numero de la face
sph1 i solidgetsommetsface /TAB exch def
sph1 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 0.75 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 A2A3
 V2 U2 vectprod3d norme3d /d2 exch 0.75 mul def
 0 0 d2 d1 Ellipse_ sph1 i projpath
1 0 0 setrgbcolor
fill
} for
}%
\end{pspicture}
\end{center}
\end{document}

Aucun commentaire:

Enregistrer un commentaire