如何在光盘的某个部分上创建径向阴影?

如何在光盘的某个部分上创建径向阴影?

我努力在磁盘的某个部分(类似于披萨片)上制作径向阴影,我想知道是否有人可以帮助我!

基本上我有该代码生成的图形:

\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)。如果有人知道这个数字的来源(或更精确的值),我很乐意听听。

相关内容