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
글쎄, 당신이 남긴 작은 머리카락을 기리기 위해, 그리고 당신이 게시한 첫 번째 이미지에는 디지털 필터와 그것은 범위를 넘어서는 것입니다. 사용자 수준에서는 라텍스 코어 프로그래머의 주제가 되어야 하고 셰이딩을 위한 스타일 생성기를 프로그래밍해야 하지만 다음은 반복을 통해 얼마나 가까워질 수 있는지에 대한 예입니다.
결과:
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에서는 모든 것이 정상입니다.