Pfad mit Opazitätsgradient in Tikz
Inspiriert von dieser Frage möchte ich ein Unendlichkeitssymbol zeichnen, dessen Deckkraft sich entlang des Pfades ändert. Was ich bisher erreichen kann, ist Folgendes:
\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}
Es gibt jedoch zwei Probleme damit:
(1) Dies ertrinkt mit Farbverlauf , nicht mit Deckkraftverlauf. Wenn ich dieses Bild beispielsweise in einem Papier mit gelbem Hintergrund verwende, ist es immer noch grau und weiß, nicht grau und gelb.
(2) Die Kante des Pfades ist, wie Sie sehen können, nicht glatt, es scheint, als wäre die Kante eine Art Welle. (Ich denke, das liegt daran, dass der Farbverlauf durch Zeichnen vieler, vieler Kreise erreicht wird und die Linie daher nicht sehr gerade aussieht. Ich weiß jedoch nicht, wie ich das beheben soll, außer das zu reduzieren step 0.5pt, aber wenn ich das tue, wäre der Zeichenprozess sehr schleppend.)
Gibt es eine einfachere Möglichkeit, dieses Bild richtig zu zeichnen?
Antworten
Ich zeichne das Symbol mit zwei Überblendungen und experimentiere damit, sie auf der rechten Seite auszurichten.
Diese Lösung ist offensichtlich nicht optimal. Das Ausbleichen erfolgt nicht entlang des Weges, sondern von West nach Ost. Es gibt einen Farbunterschied und ein Renderartefakt, bei dem sich die Linien auf der rechten Seite treffen. Es gibt ein Problem, bei dem sich die Linien schneiden - wenn es nur Transparenz wäre, hätte es mit a gelöst werden können 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}
Bearbeiten:
Dies soll nur zeigen, dass es möglich ist, einen Pfad vollständig aus dem anderen herauszuschneiden
\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}
Dies könnte das Überlappungsproblem lösen, aber wenn ich versuche, es zu verwenden tikzfadingfrompicture, bekomme ich aufgrund meines Unverständnisses seltsame Skalierungsprobleme. -sehenhttps://tex.stackexchange.com/a/551723/8650