圆的三重覆盖的 TiKZ 图像

圆的三重覆盖的 TiKZ 图像

我想制作这张图片的 TiKZ 图像。
在此处输入图片描述

它显示了一个圆盘绕了三圈,叠在另一个圆上。(对于拓扑学家来说,这是圆到自身的三度映射。)我可以得到正螺旋部分,例如通过使用如何使用 TiKZ 绘制垂直螺旋?

我认为“徒手”绘制连接螺旋顶端和底端的曲线会很困难。我认为一定有比通过反复试验将曲线拟合到控制点更好、更系统的方法。

但我找不到更好的方法。

答案1

这是一个使用show path construction装饰将路径分解成小段的提议,这些小段首先被绘制成白色,然后稍微变细一点的黑色。这样,曲线的后面部分就会出现“擦除”效果。段的长度取决于图的样本数量。为了方便起见,我将宽度存储在 pgf 键中,因此您可以说

\draw[rubout={line width=2pt,halo=0.5pt},decorate] ...

梅威瑟:

\documentclass[tikz,border=3.14mm]{standalone}
\usetikzlibrary{decorations.pathreplacing}
\begin{document}
\begin{tikzpicture}[declare function={f(\x)=0.2*sin(\x)+\x/1000;},
 rubout/.style={/utils/exec=\tikzset{rubout/.cd,#1},
 decoration={show path construction,
      curveto code={
       \draw [white,line width=\pgfkeysvalueof{/tikz/rubout/line width}+2*\pgfkeysvalueof{/tikz/rubout/halo}] 
        (\tikzinputsegmentfirst) .. controls
        (\tikzinputsegmentsupporta) and (\tikzinputsegmentsupportb)  ..(\tikzinputsegmentlast); 
       \draw [line width=\pgfkeysvalueof{/tikz/rubout/line width},shorten <=-0.1pt,shorten >=-0.1pt] (\tikzinputsegmentfirst) .. controls
        (\tikzinputsegmentsupporta) and (\tikzinputsegmentsupportb) ..(\tikzinputsegmentlast);  
      }}},rubout/.cd,line width/.initial=2pt,halo/.initial=0.5pt]
 \draw[rubout={line width=2pt,halo=0.5pt},decorate] 
   plot[variable=\x,domain=-50:970,samples=55,smooth] ({cos(\x)},{f(\x)}) to[out=0,in=195] cycle;
 \draw[line width=2pt] (0,-2) arc(-90:270:1cm and 0.2cm);
 \draw[thick,-stealth]  (0,-0.4) -- (0,-1.4) node[midway,right]{$p$};
\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容