1

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. enter image description here

1

2 Answers 2

2

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.

enter image description here

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;
    
    % use slim arrowheads
    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;
    M = C reflectedabout(left, right);

    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}
4

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:

enter image description here

3
  • For me it's very good, but the bottom curve is not tangent with the circumference.
    – Sebastiano
    Jul 22, 2020 at 11:34
  • 1
    @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.
    – KersouMan
    Jul 22, 2020 at 11:59
  • Ah ok. In fact! :-) +1.
    – Sebastiano
    Jul 22, 2020 at 12:04

Not the answer you're looking for? Browse other questions tagged or ask your own question.