Đường dẫn với gradient độ mờ trong tikz

Oct 31 2020

Lấy cảm hứng từ câu hỏi này , tôi muốn vẽ một biểu tượng vô cực có độ mờ thay đổi dọc theo đường dẫn, những gì tôi có thể đạt được cho đến nay là:

\documentclass[tikz]{standalone}

\usetikzlibrary{decorations.markings}

\pagecolor{yellow}

\definecolor{col1}{RGB}{127,127,127}
\definecolor{col2}{RGB}{240,240,240}

\begin{document}

\begin{tikzpicture}
    \path[postaction={
        decorate,
        decoration={
            markings,
            mark=between positions 0 and \pgfdecoratedpathlength step 0.5pt with {
                \pgfmathsetmacro\myval{multiply(divide(
                    \pgfkeysvalueof{/pgf/decoration/mark info/distance from start}, \pgfdecoratedpathlength),100)};
                \pgfsetfillcolor{col1!\myval!col2};
                \pgfpathcircle{\pgfpointorigin}{0.1cm};
                \pgfusepath{fill};}
}}] plot[smooth cycle] coordinates{(0,0.7)(-0.2,0.35)(0,0)(1,0.7)(1.2,0.35)(1,0)};
\end{tikzpicture}

\end{document}

Tuy nhiên, có hai vấn đề với nó:

(1) Cái này bị át bởi gradient màu , không phải là độ mờ đục , do đó, ví dụ nếu tôi sử dụng bức ảnh này trên giấy có nền màu vàng, nó vẫn có màu xám và trắng, không phải màu xám và màu vàng.

(2) Các cạnh của đường dẫn, như bạn có thể thấy, không mịn, có vẻ như rìa là một loại sóng nào đó. (Tôi nghĩ đó là do gradient màu đạt được bằng cách vẽ nhiều vòng tròn và vì vậy đường thẳng trông không thẳng lắm. Tuy nhiên tôi không biết cách khắc phục điều này ngoại trừ giảm bớt step 0.5pt, nhưng nếu tôi làm như vậy thì quá trình vẽ sẽ rất chậm.)

Có cách nào dễ dàng hơn để vẽ bức tranh này một cách chính xác?

Trả lời

1 hpekristiansen Nov 01 2020 at 04:45

Tôi vẽ biểu tượng với hai mốt và thử nghiệm xếp chúng ở phía bên phải.

Giải pháp này rõ ràng là không tối ưu. Sự mờ dần không phải dọc theo con đường, mà là từ tây sang đông. Có sự khác biệt về màu sắc và kết xuất đồ tạo tác nơi các đường giao nhau ở phía bên phải. Có một vấn đề ở đó các đường giao nhau - nếu nó chỉ là sự trong suốt, nó có thể được giải quyết bằng a transparency group.

\documentclass[tikz]{standalone}
\usetikzlibrary {fadings, patterns}
\begin{document}
\begin{tikzpicture}
\pattern[pattern=checkerboard,pattern color=yellow](-1,-0.5) rectangle (1,0.5);
\begin{scope}
  \clip(-1,-0.5)--(0,-0.5)--(0.5,0)--(1,0)--(1,0.5)--(0,0.5)--(-0.5,0)--(-1,0)--cycle;
  \draw[darkgray, line width=5.5, path fading=west, fading transform={xscale=2, xshift=10},  line cap=round] plot[smooth] coordinates{(-0.7,0.02)(-0.5,-0.35)(0.5,0.35)(0.7,-0.02)};
\end{scope}
\begin{scope}
  \clip (-1,-0.5)--(1,-0.5)--(1,0)--(0.5,0)--(0,0.5)--(-1,0.5)--cycle;
  \draw[darkgray, line width=5.5, path fading=east, fading transform={xscale=2, xshift=10},  line cap=round] plot[smooth] coordinates{(-0.7,0)(-0.5,0.35)(0.5,-0.35)(0.7,0.02)}; 
\end{scope}
\end{tikzpicture}
\end{document}


Biên tập:

Điều này chỉ để chứng minh rằng có thể cắt một đường hoàn toàn ra khỏi đường kia

\documentclass[tikz]{standalone}
\usetikzlibrary{fadings, patterns}
\begin{tikzfadingfrompicture}[name=myfading]
\clip(-1,-0.5)--(0,-0.5)--(0.5,0)--(1,0)--(1,0.5)--(0,0.5)--(-0.5,0)--(-1,0)--cycle;
\draw[white, line width=5.5, path fading=west, fading transform={xscale=2, xshift=10},  line cap=round] plot[smooth] coordinates{(-0.7,0.02)(-0.5,-0.35)(0.5,0.35)(0.7,-0.02)};
\draw[line width=5.5, line cap=round] plot[smooth] coordinates{(-0.7,0)(-0.5,0.35)(0.5,-0.35)(0.7,0.02)}; 
\end{tikzfadingfrompicture}
\begin{document}
\begin{tikzpicture}
\pattern[pattern=checkerboard,pattern color=yellow](-1,-0.5) rectangle (1,0.6);
\fill[path fading=myfading, left color = white, right color = gray] (-1,-1) rectangle (1,1);
\end{tikzpicture}
\end{document}

Điều này có thể giải quyết vấn đề chồng chéo, nhưng bất cứ khi nào tôi cố gắng sử dụng tikzfadingfrompicture, tôi gặp phải các vấn đề về tỷ lệ kỳ lạ do sự thiếu hiểu biết của tôi. -xemhttps://tex.stackexchange.com/a/551723/8650