स्व क्रॉसिंग लाइनों / घटता के लिए सजावट

Nov 29 2020

क्या एक डबल लाइन खींचने के लिए सजावट / पोस्टिनेशन को परिभाषित करना संभव है ताकि एक आत्म-अंतःक्रिया रेखा अपने आप ऊपर आ जाए? यह दिखाने के लिए कि मेरे इन सर्पिलों का क्या अर्थ है:

\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खुद हो, ताकि गैर-सफेद पृष्ठभूमि पर क्रॉसिंग अच्छा लगे। - शायद काफी जटिल है।

जवाब

3 Noname Nov 28 2020 at 23:47

यहाँ एक तरीका है 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}

कृपया ध्यान दें कि इस उत्तर में इसके लिए पहले से ही पूरी शैली हैं ।

4 AndrewStacey Nov 30 2020 at 00:55

knotsTikZ पुस्तकालय बात की इस तरह संभालती है। वहाँ उपयोग करने के साथ एक मामूली मुद्दा है plotक्योंकि है कि एक बनाता है ड्राइंग आदेश बहुत बहुत ही कम लाइनों की और कहा कि जिस तरह से है कि के लिए महान नहीं है knotsकाम करता है के बाद से यह उपपथ के बीच चौराहों के लिए लग रहा है। सौभाग्य से, hobbyपुस्तकालय का उपयोग करके मैं नमूनों की संख्या को काफी कम कर सकता हूं क्योंकि यह बेजियर घटता का उपयोग करके प्रक्षेपित करता है।

knotsचौराहों पर वक्र का कोई हिस्सा पुनः बनाकर पुस्तकालय काम करता है पुल प्रभाव उत्पन्न करने के।

knotsलाइब्रेरी के साथ डबल ऑप्शन का उपयोग करके पीडीएफ देखे जाने पर कलाकृतियों का उत्पादन किया जा सकता है (लेकिन ऐसा नहीं है जब यह मुद्रित हो)। उन्हें हटाने के लिए विधि टिक्ज नॉट लाइब्रेरी में "फसल चक्र" के साथ समस्या पर विस्तृत है

यहाँ कोड है:

\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}

परिणाम: