mercredi 22 avril 2015

Mouvement d’un point matériel sur la surface intérieure d’un paraboloïde

Sur son site André Hautot :
 http://www.physinfo.org/phys.html
 propose un lien vers une vidéo d’une expérience qu’il intitule “Capture d’une balle” ainsi que le code Mathematica permettant de simuler “le mouvement d’une particule pesante assujettie à se mouvoir sur une surface imposée” en l’occurrence un paraboloïde. Le code Mathematica utilise les équations différentielles obtenues par application de la deuxième de Newton en coordonnées cartésiennes. Dans la première partie, nous établissons le système d’équations différentielles et utiliserons le package pst-ode pour dessiner les trajectoires.

Sean A. Genis et Carl E. Mungan dans leur article “Orbits on a concave frictionless surface” :
 http://www.dtic.mil/cgi-bin/ GetTRDoc?AD=ADA574905, 2007
 utilisent les coordonnées cylindriques et font une étude assez complète du phénomène. Nous suivons dans la deuxième partie cette étude pour en proposer une illustration avec pst-ode.

Voici quelques illustrations extraites du document :
Dans cet exemple, les 2 cercles limites des boucles sont dessinés.

Les fichiers sources :
http://manuel.luque.perso.neuf.fr/orbites-dans-paraboloid/orbites-dans-paraboloid.pdf
http://manuel.luque.perso.neuf.fr/orbites-dans-paraboloid/orbites-dans-paraboloid.tex
http://manuel.luque.perso.neuf.fr/orbites-dans-paraboloid/orbites.bib

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}

mardi 7 avril 2015

Solides avec décor à pois de couleur

\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=8 20,name=cylindrepois,action=none](0,0,0)
\codejps{
% projection sur la face n°i
% coordonnées du centre et rayon du cercle
1 1 cylindrepois solidnombrefaces 1 sub {/i exch def % numero de la face
cylindrepois 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_ 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}
\definecolor{coquille}{rgb}{0.984 0.95 0.718}
\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=coquille,
        ngrid=24 60]
\psSolid[object=tore,
        r1=3,r0=1.5,
        action=none,name=torepois,
        ngrid=18 36]
\codejps{
% projection sur la face n°i
% coordonnées du centre et rayon du cercle
0 1 torepois solidnombrefaces 1 sub {/i exch def % numero de la face
torepois i solidgetsommetsface /TAB exch def
TAB 6 3 getinterval aload pop % sommet n°2 x2 y2 z2
TAB 3 3 getinterval aload pop % sommet n°1 x1 y1 z1
distance3d /Rayon exch 3 div def % distance entre les 2 sommets /3
0 360 0 0 Rayon Cercle_ torepois i projpath
i 2 modulo 0 eq {(red) cvx exec}{(blue) 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{
% projection sur la face n°i
% coordonnées du centre et rayon du cercle
0 1 conepois solidnombrefaces 1 sub {/i exch def % numero de la face
conepois i solidgetsommetsface /TAB exch def
TAB 0 3 getinterval aload pop % sommet n°2 x2 y2 z2
TAB 3 3 getinterval aload pop % sommet n°1 x1 y1 z1
distance3d /Rayon exch 3 div def % distance entre les 2 sommets /4
0 360 0 0 Rayon Cercle_ 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}

La sphère a déjà été traitée ici :
http://pstricks.blogspot.fr/2015/04/sphere-points.html




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}

dimanche 5 avril 2015

Sphère à points

Marquer les facettes d'une sphère ou d'un solide quelconque par un point-disque de surface proportionnelle à celle de la facette.
\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{
% projection sur la face n°i
% coordonnées du centre et rayon du cercle
0 1 sph1 solidnombrefaces 1 sub {/i exch def % numero de la face
sph1 i solidgetsommetsface /TAB exch def
TAB 0 get TAB 1 get  TAB 2 get % sommet n°0 x0 y0 z0
TAB 3 get TAB 4 get  TAB 5 get % sommet n°1 x1 y1 z1
distance3d /Rayon exch 3 div def % distance entre les 2 sommets /3
0 360 0 0 Rayon Cercle_ sph1 i projpath
1 0 0 setrgbcolor
fill
} for
}%
\end{pspicture}
\end{center}
\end{document}

Configurations géométriques d’un bracelet

Voici un curieux bracelet ramené par mon épouse d’un voyage en Inde, pensant qu’il m’intéresserait. De conception très simple, puisqu’il est formé de 2 grands cercles et de 32 demi-cercles pouvant tourner autour d’un de leur diamètre respectif lié à l’un des grands cercles, ce qui permet de nombreuses configurations et des figures géométriques plaisantes. Les demi-cercles situés au-dessus ou au-dessous d’un grand cercle sont entrelacés de telle sorte que si on en tourne un, tous tournent en même temps. Les demi-cercles situés entre les 2 grands cercles sont solidaires par leurs sommets.
Il s'agit d'une tentative de représentation de ce bracelet avec PSTricks.
Je me limite dans un premier temps à la partie supérieure du bracelet : un cercle et 8 petits cercles. Les voici dépliés dans le plan du grand cercle.
On replie les demi-cercles vers l’intérieur.
Ces deux configurations représentées en perspective :
Une vue avec les demi-cercles verticaux :
Dans la deuxième étape, on représente les demi-cercles situés sous le grand cercle. Nous lions, arbitrairement afin de n’utiliser qu’une variable, les demi-cercles du dessus et dessous de telle façon qu’ils soient symétriques par rapport au plan du grand cercle. En voici deux vues, leurs plans étant inclinés à 45 degrés.
Ensuite, comme pour le bracelet réel, on duplique cette configuration et on la place sous la première de façon que les demi-cercles correspondants soient tangents :
Et pour faire plus joli, on rajoute quelques perles sur le pourtour des grands cercles.
Une animation en Gif :
Les fichiers :
http://manuel.luque.perso.neuf.fr/bracelet/bracelet-inde.pdf
http://manuel.luque.perso.neuf.fr/bracelet/bracelet-inde.tex