![如何在光盘的某个部分上创建径向阴影?](https://linux22.com/image/477559/%E5%A6%82%E4%BD%95%E5%9C%A8%E5%85%89%E7%9B%98%E7%9A%84%E6%9F%90%E4%B8%AA%E9%83%A8%E5%88%86%E4%B8%8A%E5%88%9B%E5%BB%BA%E5%BE%84%E5%90%91%E9%98%B4%E5%BD%B1%EF%BC%9F.png)
我努力在磁盘的某个部分(类似于披萨片)上制作径向阴影,我想知道是否有人可以帮助我!
基本上我有该代码生成的图形:
\begin{tikzpicture}[scale=1]
\pgfmathsetmacro{\cos}{0.5}
\pgfmathsetmacro{\sin}{sqrt(3)/2}
\pgfmathsetmacro{\size}{6}
\pgfmathsetmacro{\pis}{30}
\pgfmathsetmacro{\sizecore}{1.2}
\pgfmathsetmacro{\sizeDDcore}{1.2}
\pgfmathsetmacro{\sizeDDHe}{1}
\pgfmathsetmacro{\begDDHe}{4.2}
\pgfmathsetmacro{\sizeDDHe}{0.6}
\pgfmathsetmacro{\endDDHe}{\begDDHe+\sizeDDHe}
%
%% Main shape (pizza share like)
\draw[thick, color=gray!50] (0,0) -- (\size*\cos,\size*\sin);
\draw[thick, color=gray!50] (0,0) -- (-\size*\cos,\size*\sin);
\draw[thick, color=gray!50] (\size*\cos, \size*\sin) arc (60: 120: \size);
\fill[orange!40] (0,0) -- (\size*\cos,\size*\sin) arc (60: 120: \size) -- (-\size*\cos,\size*\sin) -- cycle;
\fill[orange!60] (0,0) -- (\begDDHe*\cos,\begDDHe*\sin) arc (60: 120: \begDDHe) -- (-\begDDHe*\cos,\begDDHe*\sin) -- cycle;
%% Core
\fill[fill=red!80] (0,0) -- (\sizecore*\cos,\sizecore*\sin) arc (60:120:\sizecore) -- (-\sizecore*\cos,\sizecore*\sin) -- cycle;
%% DD region just outside the core
\fill[fill=red!50]
(-\sizecore*\cos,\sizecore*\sin) arc (120:60:\sizecore) -- (\sizecore*\cos,\sizecore*\sin) -- (\sizecore*\cos+\sizeDDcore*\cos,\sizecore*\sin+\sizeDDcore*\sin) arc (60:120:\sizecore+\sizeDDcore) -- (-\sizecore*\cos-\sizeDDcore*\cos,\sizecore*\sin+\sizeDDcore*\sin) -- cycle;
%% DD in the He region
\fill[fill=blue!50] (-\begDDHe*\cos,\begDDHe*\sin) arc (120:60:\begDDHe) -- (\begDDHe*\cos,\begDDHe*\sin) -- (\endDDHe*\cos,\endDDHe*\sin) arc (60:120:\endDDHe) -- (-\endDDHe*\cos,\endDDHe*\sin) -- cycle;
结果:
并且我希望有一个径向阴影来平滑地匹配不同颜色的区域。
在此先感谢您的帮助 !
干杯,昆汀
答案1
首先,我不得不指出,通过使用极坐标(和 foreach 循环),原始代码可以变得更简单:
\begin{tikzpicture}[scale=6]
\foreach \x/\c in {1/orange!40, .8/blue!50, .7/orange!60, .4/red!50, .2/red!80}{
\fill[\c] (0,0) -- +(60:\x) arc (60:120:\x);
}
\draw[thick, gray!50] (0,0) -- +(60:1) arc (60:120:1) --cycle;
\end{tikzpicture}
但既然你要求使用径向阴影,那么你可以这样做:
\documentclass[tikz, border=5pt]{standalone}
\pgfdeclareradialshading{pizza}{\pgfpointorigin}{%
color(0cm)=(red!80);
color(1.1cm)=(red!80);
color(1.3cm)=(red!50);
color(2.3cm)=(red!50);
color(2.5cm)=(orange!60);
color(4.1cm)=(orange!60);
color(4.3cm)=(blue!50);
color(4.7cm)=(blue!50);
color(4.9cm)=(orange!40);
color(6.0cm)=(orange!40)
}
\begin{document}
\begin{tikzpicture}
\begin{scope}
\clip (0,0) -- +(60:6) arc (60:120:6) --cycle;
\pgfuseshading{pizza}
\end{scope}
\draw[thick, gray!50] (0,0) -- +(60:6) arc (60:120:6) --cycle;
\end{tikzpicture}
\end{document}
(我想我缺少了您的颜色定义,所以我的颜色与您的不匹配。)请注意,某些 pdf 查看器可能无法很好地呈现阴影。
或者,为了获得更具可扩展性的解决方案,您可以使用
\documentclass[border=5pt]{standalone}
\usepackage{tikz}
\pgfdeclareradialshading{pizza}{\pgfpointorigin}%
{color(0cm)=(red!80);
color(.16cm)=(red!80);
color(.19cm)=(red!50);
color(.34cm)=(red!50);
color(.37cm)=(orange!60);
color(.61cm)=(orange!60);
color(.64cm)=(blue!50);
color(.70cm)=(blue!50);
color(.73cm)=(orange!40);
color(.9cm)=(orange!40)
}
\begin{document}
\begin{tikzpicture}
\begin{scope}
\clip (0,0) -- +(120:6) arc (120:60:6) --cycle;
\shade[shading=pizza] (0,0) circle (6);
\end{scope}
\draw[thick, gray!50] (0,0) -- +(60:6) arc (60:120:6) --cycle;
\end{tikzpicture}
\end{document}
在此版本中,阴影将随圆的半径缩放。出于某种原因,阴影规范中圆的外侧约为 0.88 厘米(我已将其四舍五入为 0.9)。如果有人知道这个数字的来源(或更精确的值),我很乐意听听。