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 コア プログラマーとシェーディング用のスタイル ジェネレーターのプログラミングの対象になるはずですが、反復することでどれだけ近づけるかの例を次に示します。
結果:
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}
追加メモ:
- Firefox PDF ビューアでは、シェーディングが機能しません。使用しているバージョンが原因かどうかはわかりませんが、Edge と Acrobat ではすべて正常です。