# how to make a surface of revolution [closed]

Kind regards, I would like to know how I can draw the figure, what software do you recommend. I am highly grateful for an answer.

• Welcome to the community TeX.SE. I can suggest mathcha: mathcha.io/editor Jul 5, 2020 at 11:34

For true three-dimensional drawing, you could look at Asymptote, but you can get quite good fake-3d with plain Metapost, which is what I have shown here. This is wrapped up in the luamplib package, so you need to compile it with lualatex.

I've included comments to explain what each part does, and you can find full details in the introductions and manuals at the link above.

\documentclass[border=5mm]{standalone}
\usepackage{luatex85}
\usepackage{luamplib}
\begin{document}
\mplibtextextlabel{enable}
\begin{mplibcode}
beginfig(1);
% define the axes
path xx, yy, zz;
xx = origin -- 180 right;
yy = origin --  89 up;
zz = origin --  72 left rotated 30;

interim ahangle := 24;

% define the key point, and label with a call out
z0 = (xpart point 1/2 of xx, ypart point 5/8 of yy);
z1 = z0 shifted (13, 21);
label.top("$(g(u), h(u), 0)$", z1);
drawarrow z1 -- z0 cutafter fullcircle scaled 5 shifted z0;
drawdot z0 withpen pencircle scaled dotlabeldiam;

% mark the dimensions
path g, h;
g = point 5/8 of zz -- point 5/8 of zz shifted (x0, 0);
h = point 5/8 of zz -- point 5/8 of zz shifted (0, y0);
drawoptions(withcolor 1/2 white);
draw subpath (0, 3/4) of zz shifted (x0, 0);
draw z0 -- subpath (0, 3/4) of zz shifted (0, y0);
drawarrow g;
drawarrow h;
drawoptions();

% add labels in the middle of the dimension arrows
picture G; G = thelabel("$g(u)$", point 1/2 of g); unfill bbox G; draw G;
picture H; H = thelabel("$h(u)$", point 1/2 of h); unfill bbox H; draw H;

% define a shallow parabola and its reflection in the x-axis
path C, M;
C = ((-2, 4) {1, -4} .. (-1, 1) {1, -2} .. origin .. (1,1) {1, 2} .. (2, 4) {1, 4})
scaled 1/4
xscaled 13/16 abs(point 1 of xx)
yscaled 1/4 abs(point 1 of yy) shifted z0;

draw C withcolor 2/3 red; label.urt("$C$", point 1/2 of C);
draw M withcolor 2/3 blue; label.urt("$M$", point 7/2 of M);

% define the circle scaled to make it look like it's in 3D
path ee;
ee = fullcircle xscaled 1/4 abs(point 1 of xx) yscaled 2y0 shifted (x0, 0);

% draw the front and back of the circle
draw subpath (-2, 2) of ee dashed evenly scaled 1/2 withcolor 1/2 white;
draw subpath (2, 6) of ee withpen pencircle scaled 3/4;

% now show the rotated point
z2 = point 3.14 of ee;
draw z0 -- center ee -- z2;
path a; a = subpath (2, 4) of ee shifted - center ee scaled 1/3 shifted center ee
cutafter (center ee -- z2);
drawarrow a; label.ulft("$v$", point 1/4 of a);
dotlabel.ulft("$\mathop{\textbf{x}}(u, v)$", z2);

% draw the broken x-axis
draw point 0 of xx -- point 4 of ee;
draw point 4 of ee -- center ee dashed evenly scaled 1/2 withcolor 1/2 white;
draw center ee -- point 1 of xx;
label.rt ("$x$", point 1 of xx);

% finally draw the other axes and label them
draw yy; label.top ("$y$", point 1 of yy);
draw zz; label.llft ("$z$", point 1 of zz);

endfig;
\end{mplibcode}
\end{document}


Here is an example of what you can achieve with TikZ. It is not optimal, but you can play with perspective or coordinates to fine tune the result:

\documentclass{standalone}

\usepackage{tikz}
\usetikzlibrary{arrows.meta}
\usetikzlibrary{calc}
\usetikzlibrary{3d}

\begin{document}

\begin{tikzpicture}

\draw (0, 0, 0) -- (0, 2, 0)
node[above] {$y$};
\draw (0, 0, 0) -- (0, 0, 3)
node[below left] {$z$};
\draw (0, 0, 0) -- (1.5, 0, 0);
\draw[dashed] (1.5, 0, 0) -- (2, 0, 0);
\draw (2, 0, 0) -- (4, 0, 0)
node[right] {$x$};

\draw[-Latex] (0, 0, 1.5) -- (2, 0, 1.5)
node[midway, below] {$g(u)$};
\draw (2, 0, 0) -- (2, 0, 2);

\draw[-Latex] (3, 0, 0) -- (3, 2, 0) coordinate (h)
node[midway, right] {$h(u)$};

\draw ($(h) - (0.2, 0, 0)$) -- ($(h) + (0.2, 0, 0)$);

\begin{scope}[canvas is yz plane at x = 2]
\draw[
domain  = -180:0,
samples = 200,
dashed
] plot ({2*cos(\x)},{2*sin(\x)});
\draw[
domain  = 180:0,
samples = 200
] plot ({2*cos(\x)},{2*sin(\x)});

\draw (0, 0) -- (2, 0) coordinate (top);

\draw (0, 0) -- +(50:2) coordinate (mid)
node[above left] {$x(u,v)$};

\draw[Latex-] (top) -- + (-70:1)
node[above] {$(g(u),h(u),0)$};

\draw[-Latex] (1, 0) arc (0:50:1)
node[midway, above] {$v$};

\end{scope}

\fill[black] (top) circle (0.05);
\fill[black] (mid) circle (0.05);

\begin{scope}[canvas is xy plane at z = 0]

\draw (top) arc (-90:-120:3)
node[midway, above] {$C$};
\draw (top) arc (-90:-60:3);

\draw (2, -2) arc (90:120:3);
\draw (2, -2) arc (90:60:3);

\end{scope}

\node at (4, 0, 2) {$M$};

\end{tikzpicture}

\end{document}


which yields:

• For me it's very good, but the bottom curve is not tangent with the circumference. Jul 22, 2020 at 11:34
• @Sebastiano Actually, it is, but the perspective makes it look like it isn't. When looking at the figure, I'm even under the impression that the top point of the circle has a bigger x coordinate than the bottom point. I think, it would be a good idea to introduce the perspective library and play a bit around with it. Jul 22, 2020 at 11:59
• Ah ok. In fact! :-) +1. Jul 22, 2020 at 12:04