你好,我想使用 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}