\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
\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
/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
/ellipse { /TableauxPoints [
0 Pas 360 { /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
/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
\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
\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
/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
/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
/PSfacette vX nXfacette mul
vY nYfacette mul add
vZ nZfacette mul add
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
PSfacette 0 ge { 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
}\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$}
\SectionConique[Draft=true,Hstop=8]\FacetteConique[AngleStart=60,increment=20]\FacetteConique[AngleStart=240,H=-3,increment=20]\pnodeThreeD(0,30 cos -3 mul,30 sin -3 mul){H}
\end{pspicture}
\end{document}

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