是否可以定义一个装饰/后动作,用于绘制双线,以便自相交线绘制在其自身之上?为了说明我的意思,请看这些螺旋:
\documentclass[tikz, border=1cm]{standalone}
\begin{document}
\begin{tikzpicture}
\draw[red, double=yellow, thick, domain=0:pi, smooth, samples=200] plot (\x, {cos(10*\x r)} , {sin(10*\x r)} );
\begin{scope}[yshift=-3cm]
\foreach \i in {1,...,10}
\draw[red, double=yellow, thick, domain=pi*(\i-1)/10:pi*\i/10, smooth, samples=200] plot (\x, {cos(10*\x r)} , {sin(10*\x r)} );
\end{scope}
\end{tikzpicture}
\end{document}
上面的螺旋线显示了正常双线的效果,下面的螺旋线显示了所需的结果。我希望只用一个\draw
命令就能完成结果,以避免渲染伪影,并使smooth
选项在整个螺旋线上起作用。
最终,我希望能够使用白色作为外部颜色,从而产生交叉效果。为了能够更好地回答本网站上的问题,例如 圆锥螺旋和圆柱螺旋
我认为,通过在绘制路径时对路径的小段进行重复,应该可以实现这一点。一个简单的方法如下:
\documentclass[tikz, border=1cm]{standalone}
\usetikzlibrary {decorations.pathmorphing}
\begin{document}
\begin{tikzpicture}
\draw[yellow,
decorate, decoration={zigzag, segment length=1mm, amplitude=0mm},
preaction={draw, ultra thick, red},
domain=0:pi, samples=200] plot (\x, {cos(10*\x r)} , {sin(10*\x r)} );
\end{tikzpicture}
\end{document}
不起作用,因为预操作应用于整个路径而不是段。
更好的解决方案是,如果路径可以clip
自行改变,那么交叉口在非白色背景上看起来会很漂亮。- 可能相当复杂。
答案1
这里提供一种方法show path construction
。
\documentclass[tikz, border=1cm]{standalone}
\usetikzlibrary{decorations.pathreplacing}
\begin{document}
\begin{tikzpicture}[path decomposition/.style={%
postaction={decoration={show path construction,
lineto code={
\draw[#1] (\tikzinputsegmentfirst) -- (\tikzinputsegmentlast);
},
curveto code={
\draw[#1] (\tikzinputsegmentfirst) .. controls
(\tikzinputsegmentsupporta) and (\tikzinputsegmentsupportb)
..(\tikzinputsegmentlast) ;
},
closepath code={
\draw[#1] (\tikzinputsegmentfirst) -- (\tikzinputsegmentlast) {closepath};} }
,decorate}}]
\draw[red, double=yellow, thick, domain=0:pi, smooth, samples=200,
path decomposition={red, double=yellow, thick}] plot (\x, {cos(10*\x r)} , {sin(10*\x r)} );
\begin{scope}[yshift=-3cm]
\foreach \i in {1,...,10}
\draw[red, double=yellow, thick, domain=pi*(\i-1)/10:pi*\i/10, smooth, samples=200] plot (\x, {cos(10*\x r)} , {sin(10*\x r)} );
\end{scope}
\end{tikzpicture}
\end{document}
请注意,已经有完整的样式了这个答案。
答案2
这knots
TikZ 库可以处理这类事情。使用plot
绘图命令时会出现一个小问题,因为这会创建一个很多非常短的线,这对于它的工作方式来说并不好,knots
因为它寻找子路径之间的交点。幸运的是,使用hobby
由于库使用贝塞尔曲线进行插值,因此我可以大大减少样本的数量。
该knots
库的工作原理是重新绘制交叉路口处的部分曲线来产生立交桥效果。
使用库中的 double 选项knots
可能会在查看 PDF 时产生伪影(但不会在打印时产生伪影)。有关如何去除伪影的详细说明,请参阅tikz 结库中的“麦田怪圈”问题
代码如下:
\documentclass{article}
%\url{https://tex.stackexchange.com/q/572737/86}
\usepackage{tikz}
\usetikzlibrary{knots,hobby}
\tikzset{
basic strand/.style={
red,
double=yellow,
double distance=1pt,
},
crossing strand/.style={
line width=1.8pt,
only when rendering/.style={%
draw=yellow,%
line width=1pt,
double=none,
}
}
}
\begin{document}
\begin{tikzpicture}[use Hobby shortcut]
\begin{knot}[
consider self intersections=true,
ignore endpoint intersections=false,
background colour=red,
every intersection/.style={
crossing strand
},
only when rendering/.style={
basic strand
},
clip width=1
]
\strand (0,1,0) \foreach \x in {1,...,80} { .. (\x/80*pi, {cos(22.5*\x )} , {sin(22.5*\x )} ) };
\end{knot}
\end{tikzpicture}
\end{document}
结果: