mercredi 25 mars 2015

Représenter une surface par des lignes version 0.3

Par rapport à la première version :
http://pstricks.blogspot.fr/2015/03/representer-une-surface-par-des-lignes.html
2 options ont été rajoutées, ce sont les valeurs par défaut qui sont indiquées. :
     
  • ColorsLines={(red) (red)} : permet d’obtenir une version bicolore des lignes, par exemple on obtiendra une alternance de lignes magenta et jaune en écrivant ColorsLines={(magenta) (yellow)}.
  • Le booléen bicolor=false permet d’activer la version bicolore des lignes, il suffit d'écrire bicolor dans les options.
  • Un booléen contour=false permet de dessiner la contour de la surface, il suffit décrire [contour] dans les options.
  • La couleur et l’épaisseur du contour peuvent être choisis avec les options :
    contourcolor=blue et contourwidth=.8pt.
 Voici 2 exemples illustrant ces nouvelles options :

Les fichiers :
http://manuel.luque.perso.neuf.fr/pst-shl/pst-shl-v.03.zip

dimanche 22 mars 2015

Représenter une surface par des lignes

Pour représenter une surface z = f (x, y), on utilise l’algorithme deWright.
Dans son livre : Graphisme Scientifique paru aux éditions Masson en 1985, l’auteur R.Dony décrit cette méthode de façon très détaillée et propose des exemples programmés en Basic. Il est dommage que ce livre ne soit plus édité, car il est remarquablement documenté, on peut toutefois en trouver des exemplaires d’occasion chez les bouquinistes. C’est une adaptation en Postscript de son programme, que j’utilise pour la commande dédiée à ce type de tracé. Tous les exemples sont tirés du livre de R.Dony.
La commande s’écrit : \psSurfaceHiddenLine[options℄(x1,x2)(y1,y2) et comprend les options de pst-solides3d, pour éventuellement essayer de superposer les 2 types de représentations qui est du bel effet, comme on peut le voir dans l’un des exemples suivants.
  1. [nL=41] : nombre de lignes ;
  2. [nP=99] : nombre de points pour chaque ligne.
 (x1,x2)(y1,y2) sont les bornes d’étude de la fonction.
[viewpoint et Decran] sont les options de pst-solides3d.








Le package porte de nom de pst-shl et comporte les fichiers .sty, .tex et la documentation :

http://manuel.luque.perso.neuf.fr/pst-shl/pst-shl.zip

Le livre de R.Dony étant difficilement trouvable,  voici les 6 pages conscrées à ce thème :
http://manuel.luque.perso.neuf.fr/pst-shl/Dony-doc.zip


le code :

\begin{pspicture}(-7.5,-7)(7.5,7)
\psframe(-7.5,-7)(7.5,7)
\psset{nP=150,nL=51,viewpoint=100 60 25 rtp2xyz,Decran=100,lightsrc=viewpoint}%
\psSurface[inouthue=0 1 0.5 1,ngrid=0.1 0.1,
          incolor=yellow,linewidth=0.05\pslinewidth,
          grid,unit=1.75,algebraic](-3,-3)(3,3){3*sin(x)^3*sin(y)^3}%
\rput(0.1,0.6){%
\psSurfaceHiddenLines[unit=1.75,algebraic](-3,3)(-3,3){3*sin(x)^3*sin(y)^3}}%
\rput(0,-6){\huge$z=3\sin^3x\sin^3y$}
\end{pspicture}

lundi 9 mars 2015

Maillage d’un solide comme un mur de maçonnerie

C’est une alternative au maillage classique adopté par pst-solides3d. Ce n’est pas d’un grand intérêt,mais cela m’a paru amusant. En voici quelques exemples. La commande dédiée à ce type de maillage est : \psmasonrywall[option](x,y,z).
Il faut définir la surface paramétrée comme dans pst-solides3d avec :
\psSolid[object=surfaceparametree,function=...]
La commande en reprend toutes les options.

Le tore

Une sphère

Un igloo

Un œuf


Une surface

Une surface du site melusine.org :
http://melusine.eu.org/lab/bmp/a_mp-solid/s_psurfaces/ex22.mpf?fig=1

Les 2 versions d’un bi-cône avec chaque type de maillage


Un paraboloïde
Fusion de 2 tores
Les fichiers :
http://manuel.luque.perso.neuf.fr/mur/psmasonrywall.zip

jeudi 26 février 2015

Dessiner le contour d’un objet avec pst-solides3d

Le dessin du contour d’un objet : cylindre, cône et sphère lorsque le maillage n’est pas représenté (option [grid] désactivée) nécessite quelques petits calculs supplémentaires, car le contour vu dépend de la position de l’observateur, c’est-à-dire des coordonnées de l’option [viewpoint]. Dans les 3 exemples, c’est l’angle qui est pris comme paramètre dans la variable postscript angleT, le point de vue est défini par la variable /pointVue, on pourra modifier la distance à l’origine et l’angle (premier et troisième paramètre de viewpoint).

\documentclass{article}
\usepackage[a4paper,margin=2cm]{geometry}
\usepackage[latin1]{inputenc}%
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{pst-solides3d}
\title{Dessiner le contour d'un objet avec pst-solides3d}
\date{26 février 2015}
\begin{document}
\maketitle
Le dessin du contour d'un objet : cylindre, cône et sphère lorsque le maillage n'est pas représenté (option \texttt{[grid]} désactivée) nécessite quelques petits calculs supplémentaires, car le contour vu dépend de la position de l'observateur, c'est-à-dire des coordonnées de l'option \texttt{[viewpoint]}. Dans les 3 exemples, c'est l'angle $\theta$ qui est pris comme paramètre dans la variable postscript \texttt{angleT}, le point de vue est défini par la variable \texttt{/pointVue}, on pourra modifier la distance à l'origine et l'angle $\phi$ (premier et troisième paramètre de \texttt{viewpoint}).
\begin{center}
\begin{pspicture}(-5,-3)(5,5)
\psframe(-5,-3)(5,5)
\pstVerb{/hauteur 5 def /rayon 2 def /angleT 50 def /pointVue {20 angleT 30 rtp2xyz} def
/jaunepale {0 0 0.25 0 setcmykcolor} def}%
\psset{viewpoint=pointVue,Decran=15,lightsrc=50 30 27 rtp2xyz,solidmemory}
\psSolid[object=grille,base=-4 4 -4 4]%
\psSolid[object=cylindre,
        h=hauteur,r=rayon,grid,
        hue=0 1,fcol=0 (jaunepale),
        ngrid=1 60](0,0,0)
\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}
\begin{center}
\begin{pspicture}(-5,-6)(5,3)
\psframe(-5,-6)(5,3)
\pstVerb{/rayon 2.5 def /angleT 50 def /pointVue {20 angleT 30 rtp2xyz} def}%
\psset{viewpoint=20 angleT 30 rtp2xyz,Decran=15,lightsrc=15 30 30 rtp2xyz,solidmemory}
\psSolid[object=plan,definition=normalpoint,args={0 0 rayon neg [0 0 1]},
         action=none,
         base=-4 4 -4 4,
         name=monplanH]
\psset{plan=monplanH}
\psProjection[object=cercle,linewidth=0.005,fillstyle=solid,fillcolor=gray!70,resolution=360,linecolor=gray!70,
              args=0 0 rayon]
\composeSolid
\psSolid[object=grille,base=-4 4 -4 4,linewidth=0.02,opacity=0.5](0,0,rayon neg)
\psSolid[object=sphere,
        r=rayon,grid,
        fillcolor=cyan!50,
        ngrid=36 72](0,0,0)
\psSolid[object=plan,definition=normalpoint,args={0 0 0 [pointVue]},
         action=none,
         base=-4 4 -4 4,
         name=monplanV]
\psset{plan=monplanV}
\psProjection[object=cercle,linewidth=0.05,
              args=0 0 rayon]
\end{pspicture}
\end{center}
\begin{center}
\begin{pspicture}(-5,-3)(5,5)
\psframe(-5,-3)(5,5)
\pstVerb{/hauteur 5 def /rayon 3 def /angleT 50 def /pointVue {20 angleT 30 rtp2xyz} def}%
\psset{viewpoint=pointVue,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,
         hue=0 1 0.8 1,
        ngrid=1 72](0,0,0)
\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}

Dans l'exemple de la sphère, si on inverse les couleurs (avec The Gimp), on obtient une image avec un relief intéressant :



mardi 17 février 2015

Une étude graphique de la tour Eiffel par Carlo Alberini

Une étude graphique de la tour Eiffel par Carlo Alberini dont les schémas ont été réalisés avec les packages pst-3dplot et pst-solides3d.
Voici les dessins de cette étude :
Profili di pilastro a minimo dispendio di materiale. Le variazioni di profilo sono calcolate nel piano xz, a sinistra, e nel piano yz, a destra.
Linee di intersezione tra i profili dei pilastri a minimo dispendio di materiale calcolati in precedenza, a sinistra, e raffigurazione di una delle quattro superfici risultanti, a destra. L’intersezione tra i profili dei due pilastri a minimo dispendio di materiale `e avvenuta lungo direzioni mutuamente perpendicolari.

 Rappresentazione schematica della Tour Eiffel.

Les fichiers :
 http://manuel.luque.perso.neuf.fr/Carlo-Alberini/Eiffel-grafico.pdf
http://manuel.luque.perso.neuf.fr/Carlo-Alberini/Eiffel-grafico.tex


dimanche 15 février 2015

Une autre image d'un tore

La revue Quadrature n°92 représente en couverture un tore faisant apparaître deux familles de cercles de Villarceau :
http://www.quadrature.info/index.php?page=zoom&photo=numero92.jpg

l'image a été réalisée par Boris Asancheyev.
C'est cette image que j'ai essayé de calculer et de reproduire avec PSTricks (révision 16/02/2015)




\documentclass{article}
\usepackage{pst-solides3d}
% Manuel Luque : 16 février 2015
% manuel.luque27@gmail.com
% gswin64c -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -o pst-rubansV-essais-2.pdf pst-rubansV-essais-2.ps
% or even:
% gswin64c -sDEVICE=pdfwrite -o pst-rubansV-essais-2.pdf - < pst-rubansV-essais-2.ps
\begin{document}
\begin{center}
\begin{pspicture}(-5,-5)(5,5)
\psframe*(-5,-5)(5,5)
% \psframe[fillstyle=hlines,hatchangle=0](-5,-5)(5,5)
\psset{viewpoint=100 0 40 rtp2xyz,Decran=100}
\pstVerb{
/nu 72 def /nv 36 def %
/vmax 360 def
/vmin 0 def
/umax 360 def
/umin 0 def
         /Ri1 3 def /ri1 1.5 def
/CalcCoordinates{%2 dict begin
 %        /v exch def /u exch def
         Ri1 ri1 v cos mul add u cos mul % x
         Ri1 ri1 v cos mul add u sin mul % y
         ri1 v sin mul % z
%         end
         } def
/du umax umin sub nu div def
/dv vmax vmin sub nv div def
/sommets0 [
       vmin dv vmax  {% méridien après méridien
        /v exch def
% les sommets le long d'un méridien
  /u umin def
    nu 1 add {
        [CalcCoordinates]
  /u u du add def
     }repeat
       }for
       ] def
%
/faces0 { % avant l'ajout du centre
   0 1 nv 0 sub {
   /k1 exch def
k1 nu 1 add mul 1 nu k1 1 add mul k1 add 1 sub {/i exch def
    [
     i 1 add
     i
     i nu add 1 add
     i nu add 2 add
    ]
    } for
    } for}
    def
%
/Sommets % après l'ajout du centre
[
   0 1 nv 1 sub {
   /k1 exch def
k1 nu 1 add mul 1 nu k1 1 add mul k1 add 1 sub {/i exch def
    [/pointsSommets [
     sommets0 i 1 add get aload pop
     sommets0 i get aload pop
     sommets0 i nu add 1 add get aload pop
     sommets0 i nu add 2 add get aload pop
    ] def
    pointsSommets aload pop pointsSommets isobarycentre3d]
    } for
    } for]
    def
%
/SOMMETS {
0 1 Sommets length 1 sub {/iL exch def
 Sommets iL get aload pop
 } for
 } def
%
/FACES {
 0 5 [SOMMETS] length 3 idiv 5 sub {/iF exch def
 [iF iF 4 add iF 1 add]
 [iF 1 add iF 4 add iF 2 add ]
 [iF 2 add iF 4 add iF 3 add ]
 [iF iF 3 add iF 4 add ]
 } for
 } def
}%
\psSolid[object=new,sommets=SOMMETS,faces=FACES,fillcolor=yellow,grid,
% une bande
%         fcol=0 4 nu mul dup nv 1 sub mul  {/i exch def i (bleu) i 2 add (bleu)}for
% toutes les bandes paires
fcol=0 4 nu 4 mul 4 sub {/j1 exch def j1 4 nu mul dup nv 1 sub mul j1 add {/i1 exch def i1 (bleu) i1 2 add (bleu)}for} for
         ]
\end{pspicture}
\end{center}
\end{document}

vendredi 13 février 2015

Tore découpé en rubans de Villarceau - version 3

Un tore découpé en rubans de Villarceau (suite du message précédent) :

 http://pstricks.blogspot.fr/2015/02/tore-decoupe-en-rubans-de-villarceau.html

 sous forme de package (révision de la documentation 14/02/2015):

http://manuel.luque.perso.neuf.fr/pst-rubansV/


Complément à la documentation 15/02/2015 :
Donuts avec comme décoration des demi-rubans de Villarceau