%% d'apres les donnees de %% http://www.mathcurve.com/courbes3d/viviani/viviani.shtml -2 2 setxrange -2 2 setyrange 150 setxunit 10 10 6 SetCamPos 0 0 0 SetCamView -10 10 setxrange3d -3 3 setyrange3d 2 setlinejoin rouge /g { 3 dict begin settvar #rpn# (Cos (t))^2 #rpn# Cos (t)* Sin (t) #rpn# Sin (t) end } def /g' { 3 dict begin settvar #rpn# -2 * Sin (t) * Cos (t) #rpn# - Sin (t)* Sin (t) + Cos (t)* Cos (t) #rpn# Cos (t) end } def /g'' { 3 dict begin settvar #rpn# -2*Cos(t)*Cos(t) + 2*Sin(t)*Sin(t) #rpn# -2*Cos(t)*Sin(t) -2*Sin(t)*Cos(t) #rpn# -Sin(t) end } def 0 pi 2 mul {g} CourbeR3 % stop .3 setlinewidth %/aretescachees false def noir %GetCamPos setlightsrc %solidgridOff /defaultsolidmode 3 def .98 [36 36] newsphere dup videsolid dup (.3 setfillopacity .3 setgray) (.3 setfillopacity jaune) inoutputcolors -1 .475 1 [36 36] newcylindrecreux {.49 0 0 translatepoint3d} solidtransform dup (.3 setfillopacity .3 setgray) (.3 setfillopacity jaune) inoutputcolors solidfuz 0 2 pi mul (g) .02 [120 12] newtube dup (rouge) outputcolors solidfuz drawsolid**