TikZ: Formas con un degradado de color angular

TikZ: Formas con un degradado de color angular

Publicación cruzada desde Stack Overflow:

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

¡Buena gente! Estoy intentando dibujar algunas formas con un degradado de color angular, pero no puedo encontrar la sintaxis general sobre cómo rellenar una forma como esa. Voy a necesitar dibujar muchos de estos diagramas, pero para darles una idea de la forma básica en que quiero que se vean estas cosas cuando estén terminadas, adjunto esta imagen:

ingrese la descripción de la imagen aquí

Entonces, lo que quiero es algo que pueda especificar "el degradado comienza con el color X en el ángulo A y termina con el color Y en el ángulo B". ¿La imagen TikZ tiene esa función o es necesario definir algo usted mismo?

¡Esperamos sus respuestas!

Lo único que se me ocurrió fue usar el método descrito en esta respuesta para crear una forma circular como fondo, luego "ocultar" la mayor parte con blanco y queda un recorte de mi forma. , pero el problema con este enfoque no es sólo que es un poco poco elegante, sino que tampoco funcionará si necesito tener varias formas una al lado de la otra.

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

EDITAR:Como me solicitaron que agregara algún fragmento de código, preparé este, que produce la figura que tengo en mente, aunque sin el gradiente deseado:

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

La imagen producida tiene el siguiente aspecto:

ingrese la descripción de la imagen aquí

Respuesta1

Bueno, en honor al poco pelo que te queda, y para que veas que solo es cuestión de conocimiento, y de encontrar la manera de obtener respuestas viables porque la primera imagen que publicaste requiere incluso el uso de filtros digitales y eso está más allá del alcance. A nivel de usuario, tendría que ser el tema de un programador central de látex y la programación de un generador de estilos para sombreado, pero aquí hay un ejemplo de lo cerca que se puede llegar iterando.

RESULTADO:

ingrese la descripción de la imagen aquí

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:

  • En el visor de PDF de Firefox no funcionan los sombreados, no sé si es por la versión que tengo, pero en Edge, y Acrobat todo normal.

Respuesta2

Al final, usar pgfplot resultó ser demasiado complicado, al menos para mí, ya que son muy difíciles de escalar correctamente. Después de arrancarme el pelo durante un día y medio, simplemente me di por vencido y me decidí por Inkscape. Generé la siguiente imagen de fondo:

ingrese la descripción de la imagen aquí

Recorta las flechas que quería de un primer plano blanco y listo:

ingrese la descripción de la imagen aquí

Esto me da la estética que quiero y que es fácil de manipular.

información relacionada