TikZ:具有角度顏色漸層的形狀

TikZ:具有角度顏色漸層的形狀

來自 Stack Overflow 的交叉發布:

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

好人啊!我正在嘗試繪製一些帶有角度顏色漸變的形狀,但我無法找到如何填充這樣的形狀的通用語法。我需要繪製大量這些圖表,但為了讓您了解我希望這些東西完成後的基本樣子,我附上了這張圖片:

在此輸入影像描述

所以,我想要的是這樣我可以指定「漸層以角度 A 的顏色 X 開始,以角度 B 的顏色 Y 結束」。 TikZ圖片有這樣的功能嗎,還是需要自己定義一些東西?

期待您的回覆!

我唯一能想到的就是使用這個答案中描述的方法創建一個圓形形狀作為背景,然後用白色“隱藏”它的大部分,並保留我的形狀的切口,但這種方法的問題不僅在於它有點不優雅,而且如果我需要多個形狀彼此相鄰,它也不起作用。

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

編輯:根據要求我添加一些程式碼片段,我已經將這個程式碼片段放在一起,它產生了我想要的圖形,儘管沒有所需的漸層:

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

產生的圖像如下所示:

在此輸入影像描述

答案1

好吧,為了紀念你剩下的一點頭髮,這樣你就可以看到這只是一個知識問題,並找到一種方法來獲得可行的答案,因為你發布的第一張圖像甚至需要使用數位濾鏡和這超出了使用者層級的範圍,它必須是Latex 核心程式設計師的主題,並為著色編寫樣式產生器,但這裡有一個範例,說明您可以透過迭代獲得多麼接近的結果。

結果:

在此輸入影像描述

微量元素:

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

附加說明:

  • 在 Firefox PDF 檢視器中,陰影不起作用,我不知道是否是因為我的版本原因,但在 Edge 和 Acrobat 中一切正常。

答案2

最後,使用 pgfplot 被證明太麻煩了,至少對我來說是這樣,因為它們很難正確縮放。在折騰了一天半的時間後,我放棄了,選擇了 Inkscape。我生成了以下背景圖片:

在此輸入影像描述

從白色前景中剪出我想要的箭頭,然後就可以了:

在此輸入影像描述

這給了我想要的美感,而且很容易操縱。

相關內容