Source de sections_coniques4_4.tex
Fichier TeX
\documentclass[10pt,a4paper]{article}
\usepackage[T1]{fontenc}
\usepackage[latin1]{inputenc}%
\usepackage{pst-3d,pst-node}%
\usepackage{pst-xkey}%
\makeatletter \pst@addfams{pst-coniques}
\define@key[psset]{pst-coniques}{AngleCone}{\edef\PstConiques@AngleCone{#1}}
\define@key[psset]{pst-coniques}{HauteurLimite}{\edef\PstConiques@HauteurLimite{#1}}
\define@key[psset]{pst-coniques}{AnglePlan}{\edef\PstConiques@AnglePlan{#1}}
\define@key[psset]{pst-coniques}{increment}{\edef\PstConiques@increment{#1}}
\define@key[psset]{pst-coniques}{Cyan}{\edef\PstConiques@Cyan{#1}}
\define@key[psset]{pst-coniques}{Magenta}{\edef\PstConiques@Magenta{#1}}
\define@key[psset]{pst-coniques}{Yellow}{\edef\PstConiques@Yellow{#1}}
\define@key[psset]{pst-coniques}{K}{\edef\PstConiques@K{#1}}
\define@key[psset]{pst-coniques}{xLight}{\edef\PstConiques@xLight{#1}}
\define@key[psset]{pst-coniques}{yLight}{\edef\PstConiques@yLight{#1}}
\define@key[psset]{pst-coniques}{zLight}{\edef\PstConiques@zLight{#1}}
\define@key[psset]{pst-coniques}{Hstart}{\edef\PstConiques@Hstart{#1}}
\define@key[psset]{pst-coniques}{Hstop}{\edef\PstConiques@Hstop{#1}}
\define@key[psset]{pst-coniques}{Hstep}{\edef\PstConiques@Hstep{#1}}
\define@key[psset]{pst-coniques}{BandWidth}{\edef\PstConiques@BandWidth{#1}}
%
\newif\ifPstConiques@Draft
\define@key[psset]{pst-coniques}{Draft}[true]{\@nameuse{PstConiques@Draft#1}}
\makeatother
\psset{AngleCone=30,HauteurLimite=8,AnglePlan=55,increment=2,%
       Cyan=0,Magenta=0.5,Yellow=1,K=0.5,%
       xLight=1,yLight=0,zLight=1,%
       Hstart=-8,Hstep=1,Hstop=6,BandWidth=0.45,Draft=false}
%
\SpecialCoor
\makeatletter
\def\SectionConique{\pst@object{SectionConique}}
\def\SectionConique@i{\@ifnextchar[{\SectionConique@do}{\SectionConique@do[]}}
\def\SectionConique@do[#1]{{%
\setkeys{psset}{#1}%
\def\Parameters{%
          \psk@embedangle
          \psk@viewpoint
          \psk@viewangle
          \tx@SetMatrixThreeD
% Vecteur ViewPoint
\psk@viewpoint
    /vZ ED
    /vY ED
    /vX ED
% Les couleurs
/Cyan \PstConiques@Cyan\space def
/Magenta \PstConiques@Magenta\space def
/Yellow \PstConiques@Yellow\space def
/K \PstConiques@K\space def
% direction des rayons de lumière
/xLight \PstConiques@xLight\space def
/yLight \PstConiques@yLight\space def /zLight \PstConiques@zLight\space def
% Les datas
    /THETA \PstConiques@AngleCone\space def
    /tanTHETA {THETA dup sin exch cos div} bind def
    /HauteurLimite \PstConiques@HauteurLimite\space \pst@number\psunit mul def
    /Rcone {HauteurLimite THETA cos div THETA sin mul} bind def
    /OMEGA \PstConiques@AnglePlan\space def
    /tanOMEGA {OMEGA dup sin exch cos div} bind def
    /m1 {90 THETA sub dup sin exch cos div} bind def
    /Hstart \PstConiques@Hstart\space \pst@number\psunit mul def
    /Hstep \PstConiques@Hstep\space \pst@number\psunit mul def
    /Hstop \PstConiques@Hstop \space \pst@number\psunit mul def}%
\begin@OpenObj
\ifPstConiques@Draft
\addto@pscode{%
    /increment 20 def
    /Pas 5 def}%
\else
\addto@pscode{%
    /Pas 1 def
    /increment \PstConiques@increment\space def}%
\fi
\addto@pscode{%
1 setlinejoin
\Parameters
/NormeLight {xLight dup mul yLight dup mul zLight dup mul add add
            sqrt} bind def
% l'ellipse du plan de coupe : le contour
/ellipse { /TableauxPoints [
0 Pas 360 {% on décrit le cercle
    /theta exch def [
    /Denominateur {OMEGA sin theta sin tanTHETA mul OMEGA cos mul add} def
    Denominateur 0 eq {/Denominateur 1e-4 def} if
    /zI {OMEGA 90 eq{H1}{H1 Denominateur div}ifelse} bind def
    zI 0 ge {zI HauteurLimite ge {/zI HauteurLimite def} if}
            {zI HauteurLimite neg le {/zI HauteurLimite neg def} if}
    ifelse
    zI m1 div theta cos mul
    zI m1 div theta sin mul
    zI
    \tx@ProjThreeD ]
    } for
    ] def
newpath
 TableauxPoints 0 get aload pop moveto
0  1 360 Pas div {
    /compteur exch def
    TableauxPoints compteur get aload pop
    lineto } for
closepath
 } def
% couleur de la facette
/cosV {1 xLight nXfacette mul
       yLight nYfacette mul
       zLight nZfacette mul
       add add
      NormeLight
       nXfacette dup mul
       nYfacette dup mul
       nZfacette dup mul
       add add sqrt mul div sub} bind def
% les facettes sur le cone
/facette { newpath
    /Denominateur {OMEGA sin iTA sin tanTHETA mul OMEGA cos mul add} def
     Denominateur 0 eq {/Denominateur 1e-4 def} if
    /zI {OMEGA 90 eq{H1}{H1 Denominateur div}ifelse} bind def
    zI 0 ge {zI HauteurLimite ge {/zI HauteurLimite def} if}
            {zI HauteurLimite neg le {/zI HauteurLimite neg def} if}
    ifelse
    zI m1 div iTA cos mul
    zI m1 div iTA sin mul
    zI
    \tx@ProjThreeD
     moveto
iTA Pas iTA increment add {%
    /iTA1 exch def
    /Denominateur {OMEGA sin iTA1 sin tanTHETA mul OMEGA cos mul add} def
     Denominateur 0 eq {/Denominateur 1e-4 def} if
    /zI {OMEGA 90 eq{H1}{H1 Denominateur div}ifelse} bind def
    zI 0 ge {zI HauteurLimite ge {/zI HauteurLimite def} if}
            {zI HauteurLimite neg le {/zI HauteurLimite neg def} if}
    ifelse
    zI m1 div iTA1 cos mul
    zI m1 div iTA1 sin mul
    zI
    \tx@ProjThreeD
    lineto
    } for
    /Denominateur {OMEGA sin iTA1 sin tanTHETA mul OMEGA cos mul add} def
     Denominateur 0 eq {/Denominateur 1e-4 def} if
    /zI {OMEGA 90 eq{H2}{H2 Denominateur div}ifelse} bind def
    zI 0 ge {zI HauteurLimite ge {/zI HauteurLimite def} if}
            {zI HauteurLimite neg le {/zI HauteurLimite neg def} if}
    ifelse
    zI m1 div iTA1 cos mul
    zI m1 div iTA1 sin mul
    zI
    \tx@ProjThreeD
    lineto
iTA increment add Pas neg iTA {%
    /iTA1 exch def
    /Denominateur {OMEGA sin iTA1 sin tanTHETA mul OMEGA cos mul add} def
     Denominateur 0 eq {/Denominateur 1e-4 def} if
    /zI {OMEGA 90 eq{H2}{H2 Denominateur div}ifelse} bind def
    zI 0 ge {zI HauteurLimite ge {/zI HauteurLimite def} if}
            {zI HauteurLimite neg le {/zI HauteurLimite neg def} if}
    ifelse
    zI m1 div iTA1 cos mul
    zI m1 div iTA1 sin mul
    zI
    \tx@ProjThreeD
    lineto
    } for
closepath } def
% le tracé de toutes les ellipses
Hstart Hstep Hstop {
    /H1 exch def
    /H2 {H1 \PstConiques@BandWidth\space \pst@number\psunit mul sub} bind def
H1 0 ge {
    /nZfacette THETA sin neg def}
        {
    /nZfacette THETA sin def}
ifelse
% la partie intérieure
0 increment 360 {%
    /iTA exch def
% normale à la facette
H1 0 ge {
    /nXfacette THETA cos iTA increment 2 div add cos mul def
    /nYfacette THETA cos iTA increment 2 div add sin mul def
    }
    {
    /nXfacette THETA cos iTA increment 2 div add cos mul neg def
    /nYfacette THETA cos iTA increment 2 div add sin mul neg def
    }
ifelse
% test de visibilité
    /PSfacette vX nXfacette mul
           vY nYfacette mul add
           vZ nZfacette mul add
    def
PSfacette 0 le { facette cosV
% remplissage des facettes
 Cyan cosV mul Magenta cosV mul Yellow cosV mul K cosV mul setcmykcolor
fill
} if } for
% la partie extérieure
0 increment 360 {%
    /iTA exch def
% normale à la facette
H1 0 ge {
    /nXfacette THETA cos iTA increment 2 div add cos mul def
    /nYfacette THETA cos iTA increment 2 div add sin mul def
    }
    {
    /nXfacette THETA cos iTA increment 2 div add cos mul neg def
    /nYfacette THETA cos iTA increment 2 div add sin mul neg def
    }
ifelse
% test de visibilité
    /PSfacette vX nXfacette mul
           vY nYfacette mul add
           vZ nZfacette mul add
    def
PSfacette 0 ge { facette cosV
% remplissage des facettes
 Cyan cosV mul dup mul
 Magenta cosV mul dup mul
 Yellow cosV mul
 K cosV mul dup mul
 setcmykcolor
fill
} if } for
 ellipse
  stroke
} for
 }% fin du code ps
\showpointsfalse
\end@OpenObj}}
\makeatother
%
\makeatletter
\define@key[psset]{pst-coniques}{AngleStart}{\edef\PstConiques@AngleStart{#1}}
\define@key[psset]{pst-coniques}{H}{\edef\PstConiques@H{#1}}
\psset{AngleStart=30,H=4}
\def\FacetteConique{\pst@object{FacetteConique}}
\def\FacetteConique@i{\@ifnextchar[{\FacetteConique@do}{\FacetteConique@do[]}}
\def\FacetteConique@do[#1]{{%
\pst@killglue
\setkeys{psset}{#1}%
\def\parameters{%
          \psk@embedangle
          \psk@viewpoint
          \psk@viewangle
          \tx@SetMatrixThreeD
          /iTA \PstConiques@AngleStart\space def
          /H \PstConiques@H\space \pst@number\psunit mul def
          /H' {H \PstConiques@BandWidth\space \pst@number\psunit mul sub} bind def
% Vecteur ViewPoint
          \psk@viewpoint
          /vZ ED
          /vY ED
          /vX ED
% Les couleurs
          /Cyan \PstConiques@Cyan\space def
          /Magenta \PstConiques@Magenta\space def
          /Yellow \PstConiques@Yellow\space def
          /K \PstConiques@K\space def
% direction des rayons de lumière
          /xLight \PstConiques@xLight\space def
          /yLight \PstConiques@yLight\space def
          /zLight \PstConiques@zLight\space def
          /NormeLight {xLight dup mul yLight dup mul zLight dup mul add add
            sqrt} bind def
% les autres données
    /increment \PstConiques@increment\space def
    /THETA \PstConiques@AngleCone\space def
    /tanTHETA {THETA dup sin exch cos div} bind def
    /HauteurLimite \PstConiques@HauteurLimite\space \pst@number\psunit mul def
    /Rcone {HauteurLimite THETA cos div THETA sin mul} bind def
    /OMEGA \PstConiques@AnglePlan\space def
    /Hstart \PstConiques@Hstart\space \pst@number\psunit mul def
    /Hstep \PstConiques@Hstep\space \pst@number\psunit mul def
    /Hstop \PstConiques@Hstop \space \pst@number\psunit mul def}
\begin@ClosedObj
\addto@pscode{%
1 setlinejoin
\parameters
    /tanOMEGA {OMEGA dup sin exch cos div} bind def
    /m1 {90 THETA sub dup sin exch cos div} bind def
% les facettes sur le cone
/facette { newpath
    /Denominateur {OMEGA sin iTA sin tanTHETA mul OMEGA cos mul add} def
     Denominateur 0 eq {/Denominateur 1e-4 def} if
    /zI {H Denominateur div} bind def
    zI m1 div iTA cos mul
    zI m1 div iTA sin mul
    zI
    \tx@ProjThreeD
     moveto
iTA 1 iTA increment add {%
    /iTA1 exch def
    /Denominateur {OMEGA sin iTA1 sin tanTHETA mul OMEGA cos mul add} def
     Denominateur 0 eq {/Denominateur 1e-4 def} if
    /zI {H Denominateur div} bind def
    zI m1 div iTA1 cos mul
    zI m1 div iTA1 sin mul
    zI
    \tx@ProjThreeD
    lineto
    } for
    /Denominateur {OMEGA sin iTA1 sin tanTHETA mul OMEGA cos mul add} def
     Denominateur 0 eq {/Denominateur 1e-4 def} if
    /zI {H' Denominateur div} bind def
    zI m1 div iTA1 cos mul
    zI m1 div iTA1 sin mul
    zI
    \tx@ProjThreeD
    lineto
iTA increment add 1 neg iTA {%
    /iTA1 exch def
    /Denominateur {OMEGA sin iTA1 sin tanTHETA mul OMEGA cos mul add} def
     Denominateur 0 eq {/Denominateur 1e-4 def} if
    /zI {H' Denominateur div} bind def
    zI m1 div iTA1 cos mul
    zI m1 div iTA1 sin mul
    zI
    \tx@ProjThreeD
    lineto
    } for
closepath } def
 H 0 ge {
    /nZfacette THETA sin neg def}
        {
    /nZfacette THETA sin def}
ifelse
H 0 ge {
    /nXfacette THETA cos iTA increment 2 div add cos mul def
    /nYfacette THETA cos iTA increment 2 div add sin mul def
    }
    {
    /nXfacette THETA cos iTA increment 2 div add cos mul neg def
    /nYfacette THETA cos iTA increment 2 div add sin mul neg def
    }
ifelse
% test de visibilité
    /PSfacette vX nXfacette mul
           vY nYfacette mul add
           vZ nZfacette mul add
    def
% couleur de la facette
/cosV {1 xLight nXfacette mul
       yLight nYfacette mul
       zLight nZfacette mul
       add add
      NormeLight
       nXfacette dup mul
       nYfacette dup mul
       nZfacette dup mul
       add add sqrt mul div sub} bind def
PSfacette 0 ge {%
% remplissage des facettes
 Cyan cosV mul dup mul
 Magenta cosV mul dup mul
 Yellow cosV mul
 K cosV mul dup mul
     setcmykcolor }
        {0.7 setgray}
    ifelse
facette
    fill
0 setgray
facette
stroke
 }% fin du code ps
\showpointsfalse
\end@ClosedObj}}
\makeatother
%
\makeatletter
\let\ProjThreeD\tx@ProjThreeD
\def\pnodeThreeD(#1,#2,#3)#4{%
      \pst@Verb{%
          \psk@embedangle
          \psk@viewpoint
          \psk@viewangle
          \tx@SetMatrixThreeD}
  \pnode(!#1 #2 #3 \ProjThreeD){#4}}
\makeatother
%
\pagestyle{empty}
\begin{document}
\section{Sections elliptiques}
\begin{pspicture}(-5,-7)(5,10)
\psset{viewpoint=0.5 0.5 0.1,Cyan=1}%
\pnodeThreeD(0,0,0){O}
\pnodeThreeD(0,0,11){Z}
\pnodeThreeD(5,0,0){X}
\pnodeThreeD(0,5,0){Y}
\psline{->}(O)(X)
\psline{->}(O)(Z)
\psline{->}(O)(Y)
\uput[180](Z){$z$}
\uput[0](X){$x$}
\uput[0](Y){$y$}
% pour un mode brouillon, rapide Draft=true ou augmenter increment=10 par ex.
\SectionConique[Draft=true,Hstop=8]%
\FacetteConique[AngleStart=60,increment=20]% H=4 par défaut
\FacetteConique[AngleStart=240,H=-3,increment=20]%
\pnodeThreeD(0,30 cos -3 mul,30 sin -3 mul){H}
\end{pspicture}

\end{document}

 

Validation CSS Validation XHTMLSyracuse — Dernière modification : 15 septembre 2005 (0.08s - 3952830 - 9 janvier 2009) vers le haut