TikZ:环的径向阴影

TikZ:环的径向阴影

我想要一个圆环的径向阴影,从内半径 r1 > 0 处的内颜色(红色)到外半径 r2 > r1 处的外颜色(白色)。但是

\filldraw[even odd rule,inner color=red,outer color=white] 
(0,0) circle (2.2)
(0,0) circle (1.8);

内圈仅遮盖了外圈的阴影:

radial shading of a ring

如何为阴影选择一个有限的内半径,使得全色彩从 r1 = 1.8 开始?

答案1

你是指第一个或者第二个圆圈之类的东西吗?

enter image description here

它们实现的代码是:

\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\filldraw[even odd rule,inner color=red,outer color=white] (0,0) circle (2.2);
\draw(0,0) circle (1.8);
\begin{scope}[xshift=6cm]
\filldraw[even odd rule,inner color=red,outer color=red!5] (0,0) circle (1.8);
\draw(0,0) circle (2.2);
\end{scope}
\end{tikzpicture}
\end{document}

正如 percusse 所说,唯一可能的方法是定义一个新的径向阴影。以下是一个例子:

\documentclass{article}
\usepackage{tikz}

\pgfdeclareradialshading{ring}{\pgfpoint{0cm}{0cm}}%
{rgb(0cm)=(1,1,1);
rgb(0.7cm)=(1,1,1);
rgb(0.719cm)=(1,1,1);
rgb(0.72cm)=(0.975,0,0);
rgb(0.9cm)=(1,1,1)}

\begin{document}
\begin{tikzpicture}
\filldraw[shading=ring] (0,0) circle (2.2);
\draw[fill=white](0,0) circle (1.8);

\begin{scope}[xshift=6cm]
\filldraw[shading=ring] (0,0) circle (2.2);
\draw(0,0) circle (1.8);
\end{scope}
\end{tikzpicture}
\end{document}

这将为您提供:

enter image description here

我猜这就是你的目的。请注意,该选项fill=white实际上并不是必需的,但它已用于比较两个结果。

简单添加自定义颜色:选项与定义的相同如何为思维导图概念着色?

代码:

\documentclass{article}
\usepackage{tikz}

\makeatletter
\pgfdeclareradialshading[tikz@ball]{ring}{\pgfpoint{0cm}{0cm}}%
{rgb(0cm)=(1,1,1);
rgb(0.719cm)=(1,1,1);
color(0.72cm)=(tikz@ball);
rgb(0.9cm)=(1,1,1)}
\tikzoption{ring color}{\pgfutil@colorlet{tikz@ball}{#1}\def\tikz@shading{ring}\tikz@addmode{\tikz@mode@shadetrue}}
\makeatother

\begin{document}
\begin{tikzpicture}
\filldraw[shading=ring, ring color=red] (0,0) circle (2.2cm);
\draw(0,0) circle (1.8cm);

\begin{scope}[xshift=7cm]
\filldraw[shading=ring] (0,0) circle (3) circle (2.45);
\end{scope}
\end{tikzpicture}
\end{document}

结果:

enter image description here

答案2

您需要一次性创建区域,并使用even odd rulenonzero rule使用一些技巧来实现这些应用程序。以下是一个例子:

\documentclass[tikz,border=5mm]{standalone}
\usetikzlibrary{fadings}
\pgfdeclareradialshading{myring}{\pgfpointorigin}
{
color(0cm)=(transparent!0);
color(5mm)=(pgftransparent!50);
color(1cm)=(pgftransparent!100)
}
\pgfdeclarefading{ringo}{\pgfuseshading{myring}}

\begin{document}
\begin{tikzpicture}
\filldraw[even odd rule,red ,path fading=ringo] (0,0) circle (16mm) (0,0) circle (2cm);
\filldraw[even odd rule,blue,path fading=ringo] (0,0) circle (3mm) (0,0) circle (0.5cm);
\end{tikzpicture}
\end{document}

enter image description here

答案3

这是一个扩展的解决方案克劳迪奥·菲安德里诺的解决方案。此解决方案使用 pgfkeys 自动计算具有不同内半径和外半径的新阴影。语法为:

环形阴影={来自 <颜色> 在 <内半径> 处至 <颜色> 在 <外半径>}

笔记:我唯一还是不明白的是:为什么我们要使用该值0.8818cm来获得正确的结果?)

enter image description here

\documentclass{standalone}
\usepackage{tikz}

\tikzset{
  ring shading/.code args={from #1 at #2 to #3 at #4}{
    \def\colin{#1}
    \def\radin{#2}
    \def\colout{#3}
    \def\radout{#4}
    \pgfmathsetmacro{\proportion}{\radin/\radout}
    \pgfmathsetmacro{\outer}{.8818cm}
    \pgfmathsetmacro{\inner}{.8818cm*\proportion}
    \pgfmathsetmacro{\innerlow}{\inner-0.01pt}
    \pgfdeclareradialshading{ring}{\pgfpoint{0cm}{0cm}}%
    {
      color(0pt)=(white);
      color(\innerlow)=(white);
      color(\inner)=(#1);
      color(\outer)=(#3)
    }
    \pgfkeysalso{/tikz/shading=ring}
  },
}

\begin{document}
\begin{tikzpicture}
  \shade[even odd rule,ring shading={from red at 1.8 to white at 2.2}]
  (0,0) circle (2.2) circle (1.8);

  \shade[even odd rule,ring shading={from lime at 0.5 to blue at 1.3}]
  (2,0) circle (0.5) circle (1.3);
\end{tikzpicture}
\end{document}

由 Andrew Stacey 添加 - 发布代码的评论很糟糕这是根据对其来源的调查得出的精简版本.8818cm

\tikzset{
  ring shading/.code args={from #1 at #2 to #3 at #4}{
    \pgfmathsetmacro{\inner}{25*#2/#4}
    \pgfmathsetmacro{\innerlow}{\inner-1}
    \pgfdeclareradialshading{ring}{\pgfpoint{0cm}{0cm}}%
    {
      color(0bp)=(white);
      color(\innerlow bp)=(white);
      color(\inner bp)=(#1);
      color(25bp)=(#3);
      color(50bp)=(black)
    }
    \pgfkeysalso{/tikz/shading=ring}
  },
}

相关内容