TikZ: formas com gradiente de cor angular

TikZ: formas com gradiente de cor angular

Postagem cruzada do Stack Overflow:

https://stackoverflow.com/q/78347764/2777074

Pessoas boas! Estou tentando desenhar algumas formas com um gradiente de cores angular, mas não consigo encontrar a sintaxe geral de como preencher uma forma como essa. Vou precisar desenhar muitos desses diagramas, mas para dar uma ideia básica de como quero que essas coisas fiquem quando estiverem prontas, estou anexando esta imagem:

insira a descrição da imagem aqui

Então, o que eu quero é algo que possa especificar "o gradiente começa com a cor X no ângulo A e termina com a cor Y no ângulo B". A imagem TikZ tem essa função ou é necessário definir algo por conta própria?

Aguardamos suas respostas!

A única coisa que consegui fazer foi usar o método descrito nesta resposta para criar uma forma circular como plano de fundo e, em seguida, "ocultar" a maior parte dela com branco, restando um recorte da minha forma , mas o problema dessa abordagem não é apenas ser meio deselegante, mas também não funcionará se eu precisar ter várias formas próximas umas das outras.

https://stackoverflow.com/questions/72813749/tikz-fill-a-circle-with-shading-color-by-angle

EDITAR:Sendo solicitado que eu adicionasse algum trecho de código, montei este, que produz a figura que tenho em mente, porém sem o gradiente desejado:

\begin{tikzpicture}
\draw[thick, arrows=<->] (-5,0)--(5,0);
\draw[thick, arrows=<->] (0,-5)--(0,5);
\draw[fill=red, draw=none] (2.5,0) arc (0:225:2.5) -- (225:2.2) -- (243:3) -- (225:3.8)--(225:3.5) arc (225:0:3.5) -- cycle;
\draw[fill=blue, draw=none] (290:2.5) arc (290:335:2.5) -- (335:2.2) -- (353:3) -- (335:3.8) -- (335:3.5) arc (335:290:3.5) -- cycle;
\end{tikzpicture}

A imagem produzida é a seguinte:

insira a descrição da imagem aqui

Responder1

Pois bem, em homenagem ao pouco cabelo que lhe resta, e para que você veja que é apenas uma questão de conhecimento, e de encontrar uma forma de obter respostas viáveis ​​porque a primeira imagem que você postou exige até o uso de filtros digitais e isso está além do escopo No nível do usuário, teria que ser objeto de um programador central de látex e da programação de um gerador de estilo para sombreamento, mas aqui está um exemplo de quão perto você pode chegar iterando.

RESULTADO:

insira a descrição da imagem aqui

MWE:

\documentclass[border=5pt,tikz]{standalone}
\usepackage{ifthen}
\definecolor{CusRed}{HTML}{FC003C}
\definecolor{CusBlue}{HTML}{00B3F6}
\definecolor{CusGreen}{HTML}{02A89D}

\usetikzlibrary{decorations.pathmorphing,arrows.meta,shadings}

\def\arcArrow[#1][#2][#3](#4)(#5)(#6)#7{%\arcArrow[Type][Color][Width](main_radius)(start_angle)(end angle){arrow tip-size_in degrees}
    \def\pathA{(#5:#4cm+#3)
        arc (#5:#6:#4cm+#3)
        -- (#6:#4)
        -- (#6:#4cm-#3) 
        arc (#6:#5:#4cm-#3)
        -- (#5:#4cm-#3*1.7)
        -- (#5+#7:#4cm)
        -- (#5:#4cm+#3*1.7)
        -- cycle;}
    \ifthenelse{\equal{#1}{pencildraw}}{
        \shade[pencildraw,line width=1pt,upper left=#2,
        upper right=white,
        lower left=#2,
        lower right=white, shading angle=#6]\pathA
    }{
        \ifthenelse{\equal{#1}{PseudoStroke}}{
                \begin{scope}
                    \clip
                    \pathA
                    \pgfmathparse{int(#6+1)}
                    \xdef\Shift{\pgfmathresult}
                    \foreach \j [evaluate=\j as \xn using {(\j-#6)/(#5-#6)}] in {#6,\Shift,...,#5}{
                        \fill[#2,opacity=\xn*\xn*0.4](\j:#4cm-#3) circle(#3*\xn*2.5+rand*rand*1.5mm);
                        \fill[#2,opacity=\xn*\xn*0.4](\j:#4cm+#3) circle(#3*\xn*2.5+rand*rand*1.5mm);
                        \fill[#2,opacity=\xn*\xn*0.4](\j:#4cm) circle(#3*\xn*2.5+rand*rand*1.5mm);
                    }
                \end{scope} 
            }
            {
                \shade[upper left=#2,upper right=white,lower left=#2,lower right=white, shading angle=#6]\pathA 
        }
    }
}

\begin{document}
    \begin{tikzpicture}[
        >=Triangle,%Style for arrow tip
        pencildraw/.style={%fancy style for hand drawing lines
            decorate,
            decoration={random steps,segment length=2pt,amplitude=0.5pt}
        }
    ]
    
    % This is where the drawing just begins.
        \arcArrow[pencildraw][CusRed][7pt](2)(245)(0){10};
        \arcArrow[pencildraw][CusBlue][7pt](2)(340)(285){10};
        \arcArrow[Normal][CusRed][5pt](4)(90-10)(0){5};
        \arcArrow[Normal][CusRed][5pt](4)(180-10)(90){5};
        \arcArrow[Normal][CusRed][5pt](4)(270-10)(180){5};
        \arcArrow[Normal][CusRed][5pt](4)(360-10)(270){5};
        \arcArrow[PseudoStroke][CusRed][8pt](3)(245)(0){8};
        %a combination of two styles
        \arcArrow[pencildraw][CusGreen][8pt](3)(360)(275){8};
        \arcArrow[PseudoStroke][CusGreen][8pt](3)(360)(275){8};
        %Some aditional standard drawings.
        \draw[<->,pencildraw](180:5cm) -- (0:5cm);
        \draw[<->,pencildraw](-90:5cm) -- (90:5cm);
        \draw[pencildraw](0,0) circle (0.5cm);
        
    \end{tikzpicture}
    
\end{document}

Nota adicional:

  • No visualizador de PDF do Firefox os sombreamentos não funcionam, não sei se é por causa da versão que tenho, mas está tudo normal no Edge e no Acrobat.

Responder2

No final das contas, usar o pgfplot acabou sendo muito complicado, pelo menos para mim, já que eles são muito difíceis de escalar corretamente. Depois de arrancar os cabelos por um dia e meio, desisti e optei pelo Inkscape. Gerei a seguinte imagem de fundo:

insira a descrição da imagem aqui

Recorte as setas que eu queria em um primeiro plano branco e pronto:

insira a descrição da imagem aqui

Isso me dá a estética que desejo e que é fácil de manipular.

informação relacionada