Dekorasi untuk garis / kurva yang menyilang sendiri
Apakah mungkin untuk menentukan dekorasi / tindakan, untuk menggambar garis ganda sehingga garis yang berpotongan sendiri akan menggambar di atasnya? Untuk menunjukkan apa yang saya maksud lihat spiral ini:
\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}

Spiral atas menunjukkan efek garis ganda normal dan spiral bawah menunjukkan hasil yang diinginkan. Saya berharap hasilnya selesai hanya dengan satu \draw
perintah untuk menghindari rendering artefak dan membuat smooth
opsi berfungsi di seluruh spiral.
Akhirnya, saya ingin bisa menggunakan putih sebagai warna luar dan dengan demikian menciptakan efek persilangan. Untuk dapat menjawab pertanyaan dengan lebih baik di situs ini misalnya spiral berbentuk kerucut dan silinder
Saya berpikir bahwa itu harus dimungkinkan dengan membuat penggandaan pada segmen kecil dari jalan saat sedang digambar. Pendekatan naif seperti ini:
\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}
tidak berfungsi karena preaksi diterapkan ke seluruh jalur dan bukan segmen.
Solusi yang lebih baik adalah jika jalurnya bisa clip
sendiri, sehingga persimpangan akan terlihat bagus pada latar belakang yang tidak putih. - Mungkin cukup rumit.
Jawaban
Berikut ini salah satu cara dengan 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}

Harap dicatat bahwa sudah ada gaya lengkap untuk ini dalam jawaban ini .
The knotsTikZ perpustakaan menangani hal semacam ini. Ada sedikit masalah dengan menggunakan plot
perintah gambar karena itu menciptakan banyak garis yang sangat pendek dan itu tidak bagus untuk cara knots
kerjanya karena mencari persimpangan antara sub jalur. Untungnya, dengan menggunakan hobbyperpustakaan saya dapat mengurangi jumlah sampel secara signifikan karena diinterpolasi menggunakan kurva bezier.
The knots
perpustakaan bekerja dengan menggambar ulang hanya bagian dari kurva di persimpangan untuk menghasilkan efek layang.
Menggunakan opsi ganda dengan knots
pustaka bisa menghasilkan artefak saat PDF dilihat (tapi tidak saat dicetak). Metode untuk menghapusnya dirinci pada masalah dengan "lingkaran tanaman" di perpustakaan tikz knot
Berikut kodenya:
\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}
Hasil:
