它显示了一个圆盘绕了三圈,叠在另一个圆上。(对于拓扑学家来说,这是圆到自身的三度映射。)我可以得到正螺旋部分,例如通过使用如何使用 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}