\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}[false]{\@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=0.51,Hstop=6,BandWidth=0.25,Draft=false}
\SpecialCoor
\makeatletter
\def\SectionConique{\pst@object{SectionConique}}
\def\SectionConique@i{\@ifnextchar[{\SectionConique@do}{\SectionConique@do[]}}
\def\SectionConique@do[#1]{{\pst@killglue
\setkeys{psset}{#1}\pst@Verb{ \psk@embedangle
\psk@viewpoint
\psk@viewangle
\tx@SetMatrixThreeD}\ifPstConiques@Draft
\psset{increment=20}
\pstVerb{/Pas 5 def}
\else
\pstVerb{/Pas 1 def}
\fi
\begin@OpenObj
\addto@pscode{1 setlinejoin
\psk@viewpoint
/vZ ED
/vY ED
/vX ED
/Cyan \PstConiques@Cyan\space def /Magenta
\PstConiques@Magenta\space def /Yellow \PstConiques@Yellow\space def
/K \PstConiques@K\space def
/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
/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
/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
/ellipse { /TableauxPoints [
0 Pas 359 { /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 Pas 359 {
/compteur exch def
TableauxPoints compteur get aload pop
lineto } for
closepath
} def
/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
/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
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
0 increment 360 { /iTA exch def
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
/PSfacette vX nXfacette mul
vY nYfacette mul add
vZ nZfacette mul add
def
PSfacette 0 le { facette cosV
Cyan cosV mul Magenta cosV mul Yellow cosV mul K cosV mul setcmykcolor
fill } if } for
0 increment 360 { /iTA exch def
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
/PSfacette vX nXfacette mul
vY nYfacette mul add
vZ nZfacette mul add
def
PSfacette 0 ge { facette cosV
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
}\showpointsfalse
\end@OpenObj}}
\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{L'état du projet}
L'utilisation de \verb+\pst-xkey+ permet de rendre les paramètres
plus facilement accessibles.
Toutefois les dysfonctionnements essentiels n'ont pas trouvé de
solution :
\begin{itemize}
\item affichage incorrect pour \texttt{vz<0} ou \texttt{vy<0} ;
\item l'algorithme de rendu de couleurs est à définir. J'ai choisi le
système de couleurs \texttt{CMYK} et calculé le cosinus
$\cos(\overrightarrow{n},\overrightarrow{L})$, dans lequel $\overrightarrow{n}$ est la
normale à la facette et $\overrightarrow{L}$ la direction des rayons
lumineux. J'ai pris plutôt
$1-\cos(\overrightarrow{n},\overrightarrow{L})$ et appliqué ce coefficient
aux couleurs.
\item Les paramètres de \verb+viewpoint=+ ne sont pas pris en
compte si on les passe directement dans la commande
\verb+\SectionConique[viewpoint=...]+
\end{itemize}
Les explications théoriques sont dans le fichier :
\verb+coniques_presentation.tex+.
\section{Sections elliptiques}
\begin{pspicture}(-5,-7)(5,10)
\psset{viewpoint=0.5 0.5 0.3}\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$}
\SectionConique[Draft=true,Cyan=1,xLight=1,yLight=1,zLight=0,BandWidth=0.35,Hstop=8]\end{pspicture}
\section{Sections paraboliques}
\begin{pspicture}(-5,-7)(5,10)
\psset{viewpoint=0.5 1 -0.2}\SectionConique[AnglePlan=30]\end{pspicture}
\section{Sections hyperboliques}
\begin{pspicture}(-5,-7)(5,10)
\psset{viewpoint=0.5 0.7 0.2}\SectionConique[AnglePlan=0]\end{pspicture}
\end{document}

—
Syracuse — Dernière modification : 12 septembre 2005 (0.08s - 3952811 - 9 janvier 2009)