.png)
불투명도가 점차 변하는 디스크를 만들고 싶습니다. 빨간색 디스크의 검은색 선에서 불투명도=1을 원하고 원을 따라 양방향으로 이동하여 디스크의 반대쪽 끝에서 만나면서 이 불투명도를 점차적으로 0으로 낮추도록 합니다. 만들 수 있나요? 그렇다면 어떻게 만들 수 있나요?
그림은 다음 코드로 생성되었습니다.
\documentclass[a4paper,14pt]{scrartcl}
\usepackage{tikz}
\usepackage{pgfplots,pgfplotstable}
\usetikzlibrary{calc,decorations.text}
\usepgfplotslibrary{fillbetween}
\usepackage{calc}
\pgfplotsset{compat=newest}
\usepackage[active,tightpage]{preview}
\setlength\PreviewBorder{2pt}
\definecolor{green}{rgb}{0.0, 0.5, 0.0}
\begin{document}
\begin{preview}
\begin{tikzpicture}
\filldraw [red,opacity=0.2] (0,0) circle(1);
\filldraw [blue] (0,0) circle (0.1);
\draw (0,0) -- (0,1);
\end{tikzpicture}
\end{preview}
\end{document}
답변1
이와 같이? 다양한 불투명도의 직선을 사용하여 원을 채웠습니다.
코드:
\documentclass{article}
\usepackage{tikz}
\begin{document}
\def\radius{3cm}
\begin{tikzpicture}
\foreach \Angle in {0,0.5,...,180}
{
\draw[draw=red!30,opacity=1-(1/180)*\Angle] (0,0) -- (90+\Angle:\radius);
\draw[draw=red!30,opacity=1-(1/180)*(180-\Angle)] (0,0) -- (-90+\Angle:\radius);
}
\draw[thick] (0,0) -- (90:\radius);
\filldraw[blue] (0,0) circle [radius=4pt];
\end{tikzpicture}
\end{document}
변형; 이제 원을 채우기 위해 다양한 불투명도의 원형 섹터를 사용했기 때문에 변경이 더 매끄러워졌습니다. \step을 사용하면 사용되는 호의 수를 제어할 수 있습니다(= 180/\step
). 를 사용하면 \step=5
예제에서와 같이 결과 효과가 이전 옵션만큼 시원하지는 않지만 \step
1로 변경하면(원형 섹터가 거의 직선이 됨) 시원함을 회복하게 됩니다.
코드:
\documentclass{article}
\usepackage{tikz}
\begin{document}
\def\radius{3cm}
\def\step{5}
\begin{tikzpicture}
\def\iterations{\numexpr180/\step\relax}
\foreach \Valor in {1,2,...,\numexpr\iterations-1\relax}
{
\fill[red!60,opacity=(-1/\iterations)*\Valor+1]
(0,0) -- ({90+(\Valor-0.5)*\step}:\radius)
arc [start angle=90+(\Valor-0.5)*\step,end angle=90+(\Valor+0.5)*\step,radius=\radius] -- cycle;
\fill[red!60,opacity=(-1/\iterations)*\Valor+1]
(0,0) -- ({90-(\Valor-0.5)*\step}:\radius)
arc [start angle=90-(\Valor-0.5)*\step,end angle=90-(\Valor+0.5)*\step,radius=\radius] -- cycle;
}
\filldraw[red!60,opacity=1]
(0,0) -- ({90-0.5*\step}:\radius)
arc [start angle=90-0.5*\step,end angle=90+0.5*\step,radius=\radius] -- cycle;
\draw[thick] (0,0) -- (90:\radius);
\filldraw[blue] (0,0) circle [radius=4pt];
\end{tikzpicture}
\end{document}
또는 원과 음영을 사용하여:
\documentclass{article}
\usepackage{tikz}
\begin{document}
\def\radius{3cm}
\begin{tikzpicture}
\shade[top color=red!30,bottom color=white,middle color=red!10]
(0,0) circle [radius=3cm];
\draw[thick] (0,0) -- ++(90:\radius);
\filldraw[blue] (0,0) circle [radius=4pt];
\end{tikzpicture}
\end{document}
\step=6
두 번째 방법을 사용하는 애니메이션은 어떨까요 ?
애니메이션 코드:
\documentclass{beamer}
\usepackage{tikz}
\tikzset{
invisible/.style={opacity=0,text opacity=0},
visible on/.style={alt=#1{}{invisible}},
alt/.code args={<#1>#2#3}{%
\alt<#1>{\pgfkeysalso{#2}}{\pgfkeysalso{#3}}
}
}
\begin{document}
\begin{frame}
\centering
\def\radius{3cm}
\def\step{6}
\begin{tikzpicture}
\def\iterations{\numexpr180/\step\relax}
\foreach \Valor [count=\xi from 3] in {1,2,...,\numexpr\iterations-1\relax}
{
\fill[red!60,opacity=(-1/\iterations)*\Valor+1,visible on=<\xi->]
(0,0) -- ({90+(\Valor-0.5)*\step}:\radius)
arc [start angle=90+(\Valor-0.5)*\step,end angle=90+(\Valor+0.5)*\step,radius=\radius] -- cycle;
\fill[red!60,opacity=(-1/\iterations)*\Valor+1,visible on=<\xi->]
(0,0) -- ({90-(\Valor-0.5)*\step}:\radius)
arc [start angle=90-(\Valor-0.5)*\step,end angle=90-(\Valor+0.5)*\step,radius=\radius] -- cycle;
}
\filldraw[red!60,opacity=1,visible on=<2->]
(0,0) -- ({90-0.5*\step}:\radius)
arc [start angle=90-0.5*\step,end angle=90+0.5*\step,radius=\radius] -- cycle;
\draw[thick] (0,0) -- (90:\radius);
\filldraw[blue] (0,0) circle [radius=4pt];
\end{tikzpicture}
\end{frame}
\end{document}
터미널에서 실행
convert -verbose -delay 12 -loop 0 -density 300 b.pdf b.gif
답변2
여기에 변형이 있습니다.Gonzalo Medina의 두 번째 방법:
\documentclass{article}
\usepackage{tikz}
\begin{document}
\def\radius{3cm}
\begin{tikzpicture}
\clip (0,0) circle (\radius);
\shade [inner color=white, outer color=red!30] (0,-\radius) circle (2*\radius);
\draw [thick, ] (0,0) -- ++(90:\radius);
\filldraw [blue] (0,0) circle [radius=4pt];
\end{tikzpicture}
\end{document}