Il s'agit de réaliser une sorte de tore ouvert vissé, en fait. On peut s'inspirer de
[ce fil](https://tex.stackexchange.com/questions/142152/how-to-produce-a-3d-surface-plot-by-rotating-the-2d-plot-of-a-function) sur *TeX stackexchange*, inttulé *Comment dessiner un tore ?*
On y lira qu'un tore peut par exemple être obtenu par l'équation :
x(t,s) = (2+cos(t))*cos(s+pi/2)
y(t,s) = (2+cos(t))*sin(s+pi/2)
z(t,s) = sin(t)
dont `z` et `t` appartiennent à l'intervalle `[0,2\pi]`.
\documentclass[border=10pt]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.8}
\pgfplotsset{trig format plots=rad}
\begin{document}
\begin{tikzpicture}
\begin{axis}
\addplot3[surf,
colormap/cool,
samples=20,
domain=0:2*pi,y domain=0:2*pi,
z buffer=sort]
({(2+cos(x))*cos(y+pi/2)},
{(2+cos(x))*sin(y+pi/2)},
{sin(x)});
\end{axis}
\end{tikzpicture}
\end{document}
Il s'agit de dessiner en 3D la figure 2D obtenu par les équations suivantes :
x(t) = sin(3t)cos(t)
y(t) = sin(3t)sin(t)
Un peu de gamberge nous amène à :
x(t,s) = (4+(sin(3*(t))+1.25)*cos(t))*cos(s)
y(t,s) = (4+(sin(3*(t))+1.25)*cos(t))*sin(s)
z(t,s) = ((sin(3*(t))+1.25)*sin(t))
Ce qui nous donne, pour une valeur définie de `s` et `t\in[0,2\pi]` (160),
le code et la figure suivants :
![figure avec valeur définie][1]
\documentclass[border=10pt]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.11}
\begin{document}
\begin{tikzpicture}
\begin{axis}[axis equal]
\addplot3[
surf,
samples=50, samples y=30,
colormap/cool,
domain=0:360, y domain=0:180,
z buffer=sort,
]
({4+(sin(3*(x))+1.25)*cos(x))*cos(160},
{4+(sin(3*(x))+1.25)*cos(x))*sin(160},
{(sin(3*(x))+1.25)*sin(x)});
\end{axis}
\end{tikzpicture}
\end{document}
À partir de là, on peut faire varier `s`, par exemple si l'on a `s\in[0,\pi]`, on obtient les code et figure suivants :
![figure][2]
\documentclass[border=10pt]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.11}
\begin{document}
\begin{tikzpicture}
\begin{axis}[axis equal]
\addplot3[
surf,
samples=50, samples y=30,
colormap/cool,
domain=0:360, y domain=0:180,
z buffer=sort,
]
({4+(sin(3*(x))+1.25)*cos(x))*cos(y},
{4+(sin(3*(x))+1.25)*cos(x))*sin(y},
{(sin(3*(x))+1.25)*sin(x)});
\end{axis}
\end{tikzpicture}
\end{document}
Avec `y domain=0:360`:
![complètement][3]
Fort bien, mais de vissage, point. Ajouter multiple de y: `x+3*y`.
Il est obtenu par le code suivant :
% Avec LuaLaTeX en raison du calcul difficile
\RequirePackage{luatex85}% solution temporaire pour standalone avec LuaTeX
\documentclass[border=10pt]{standalone}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}[axis equal]
\addplot3[
surf,
domain = 0:360,
y domain = 0:360,
samples = 100,
samples y = 70,
z buffer = sort,
colormap/cool,
]
( {(6+(sin(3*(x+3*y))+1.25)*cos(x))*cos(y)},
{(6+(sin(3*(x+3*y))+1.25)*cos(x))*sin(y)},
{((sin(3*(x+3*y))+1.25)*sin(x))} );
\end{axis}
\end{tikzpicture}
\end{document}
![Figure finale][4]
Supplément:
![Figure][5]
% Avec LuaLaTeX
\RequirePackage{luatex85}% solution temporaire pour standalone avec LuaTeX
\documentclass{standalone}
\usepackage{pgfplots}
\usetikzlibrary{backgrounds}
\begin{document}
\begin{tikzpicture}
\begin{axis}[axis equal,
hide axis,
/tikz/background rectangle/.style = {
left color = black,
right color = black!20,
shading angle = 135,
},
show background rectangle
]
\addplot3[
surf,
shader=flat,
shader = flat,
miter limit=1,
limit = 1,
domain = 0:360,
y domain = 0:360,
samples = 100,
samples y = 70,
z buffer = sort,
colormap/hot2,
]
( {(6+(sin(3*(x+3*y))+1.25)*cos(x))*cos(y)},
{(6+(sin(3*(x+3*y))+1.25)*cos(x))*sin(y)},
{((sin(3*(x+3*y))+1.25)*sin(x))} );
\end{axis}
\end{tikzpicture}
\end{document}
PS : cette réponse est une adaptation de celle citée plus haut ainsi que de
[celle-ci](https://tex.stackexchange.com/questions/192513/rotation-transformation-of-a-parametrized-plot) avec l'aide de [cmhughes](https://tex.stackexchange.com/users/6621/cmhughes).
[1]: http://texnique.fr:80/osqa/upfiles/fixed-value.png
[2]: http://texnique.fr:80/osqa/upfiles/half-torus.png
[3]: http://texnique.fr:80/osqa/upfiles/completement.png
[4]: http://texnique.fr:80/osqa/upfiles/figure-finale.png
[5]: http://texnique.fr:80/osqa/upfiles/supplement.png
http://texnique.fr:80/osqa/upfiles/supplement.png