从 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
好吧,为了纪念你剩下的那一点点头发,这样你就可以看到这只是一个知识问题,并且找到一种方法来获得可行的答案,因为你发布的第一张图片甚至需要使用数字滤波器,这超出了范围在用户级别,它必须是乳胶核心程序员的主题,并为阴影编写一个样式生成器,但这里有一个例子来说明通过迭代你可以获得多么接近的结果。
结果:
梅威瑟:
\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 中一切正常。