各种形状的 TikZ 测地线

各种形状的 TikZ 测地线

在此处输入图片描述

你好,我想使用 TikZ 绘制类似下图的东西。

图 1:圆柱体上有两条最初平行的测地线,但仍然保持平行。

图 2:一种变形圆锥(其边缘由 1/r 给出,其中 r 是水平方向)。在这种情况下,两个最初平行的测地线将聚焦于彼此。我真的希望 r 方向从 r=0 到 r=无穷大,但这意味着左侧圆将无限大,所以也许我们可以从 r=1 开始并将其标记为“r=0”?如果可能的话,我还想将右侧点标记为 r=无穷大。

图 3:一个圆柱体在中间被挤压,然后恢复,两条最初平行的测地线穿过它。在这种情况下,边缘由 (r^2+1/r^2)^0.5 给出,因此我们可以看到,在 r=0 和 r=infinity 时,两个圆都应该是无限的。与图 2 一样,如果我们可以将它们绘制为有限大小的圆(彼此大小相同),但无论如何将它们标记为 r=0 和 r=infinty,那就太好了。

非常感谢您的帮助。

答案1

这是一个复制粘贴的解决方案。代码不是最好的,但应该可以展示如何实现所需的图形。

对于图形,我通过使用收缩和反转选项来(3)重复使用。(2)xscale

\newcommand可以通过定义或pic环境来创建基础图形,从而美化代码,可以通过参数进行调整。因此,您可以节省复制和粘贴,并使整个代码可重复使用。

\documentclass[tikz, border=5mm]{standalone}

\def\mydomain{4*pi}

\begin{document}
  \begin{tikzpicture}
    \begin{scope}
        \begin{scope}[domain=0:\mydomain, samples=250, ultra thick]
            \draw [red] plot (\x, {sin(\x r)});
            \draw [blue] plot (\x, {cos(\x r)});
        \end{scope}

        \begin{scope}[ultra thick]
            \draw (0,1) arc (90:450:.5cm and 1cm);
            \draw (\mydomain,1) arc (90:-90:.5cm and 1cm);
            \draw [dashed] (\mydomain,1) arc (90:270:.5cm and 1cm);
            \foreach \pos in {-1,1} \draw (0,\pos) -- ++(\mydomain, 0);
        \end{scope}
    \end{scope}

    %%%

    \begin{scope}[yshift=-4cm, xscale=4]
        \begin{scope}[domain=0:\mydomain/4, samples=250, ultra thick]
            \draw [red] plot (\x, {e^(-\x) * sin(2*pi*\x r)});
            \draw [blue] plot (\x, {e^(-\x) * cos(2*pi*\x r)});
            \draw plot (\x, {e^(-\x)});
            \draw plot (\x, {-e^(-\x)});
        \end{scope}

        \begin{scope}[ultra thick, xscale=.25]
            \draw (0,1) arc (90:450:.5cm and 1cm);
        \end{scope}
    \end{scope}

    %%%

    \begin{scope}[yshift=-8cm, xscale=2]
        \begin{scope}[domain=0:\mydomain/4, samples=250, ultra thick]
            \draw [red] plot (\x, {e^(-\x) * sin(pi*\x r)});
            \draw [blue] plot (\x, {e^(-\x) * cos(pi*\x r)});
            \draw plot (\x, {e^(-\x)});
            \draw plot (\x, {-e^(-\x)});
        \end{scope}

        \begin{scope}[domain=0:\mydomain/4, samples=250, ultra thick, xscale=-1, xshift=-pi*2cm, yscale=-1]
            \draw [red] plot (\x, {e^(-\x) * sin(pi*\x r)});
            \draw [blue, yscale=-1] plot (\x, {e^(-\x) * cos(pi*\x r)});
            \draw plot (\x, {e^(-\x)});
            \draw plot (\x, {-e^(-\x)});
        \end{scope}


        \begin{scope}[ultra thick, xscale=.25]
            \draw (0,1) arc (90:450:.5cm and 1cm);
            \draw (\mydomain*2,1) arc (90:-90:.5cm and 1cm);
            \draw [dashed] (\mydomain*2,1) arc (90:270:.5cm and 1cm);
        \end{scope}
    \end{scope}

    \begin{scope}[xshift=14cm, ultra thick, font=\Large]
        \foreach [count=\i] \pos in {0,-4,-8} \node at (0,\pos) [circle, draw] {\textbf{\i}};
    \end{scope}
  \end{tikzpicture}
\end{document}

渲染图像

相关内容