回答时这个问题,我发现该shading angle
键没有按照我的预期执行。以下 MWE 说明了这个问题。我定义了一个具有锐边的阴影,以便更容易看到它的方向。
\documentclass[tikz,margin=5pt]{standalone}
\begin{document}
\pgfdeclareverticalshading{myshading}{100bp}{color(0bp)=(red); color(49bp)=(red); color(51bp)=(green); color(100bp)=(green)}
\begin{tikzpicture}[scale=2]
\draw[shading=myshading,shading angle=15]
(0:1)
arc (0:30:1)
-- (30:1.2)
arc (30:0:1.2)
-- cycle;
\draw (0,0) -- (15:1.2);
\end{tikzpicture}
\end{document}
这是结果。请注意,尽管线和的角度shading angle
都设置为 15 度,但阴影中的过渡和线并不平行。
这是我所期望的:
pgfmanual 中有关阴影路径的部分并没有真正解释这个键的工作原理。
答案1
以下是我根据自己的实验得出的钥匙工作原理,分为五个步骤:
- 首先,将选定的阴影应用到方形画布上
- 然后,
shading angle
应用密钥。 - 然后将画布调整为要着色的路径的边界框的大小。如果结果不是正方形,则会改变渐变的角度!
- 画布被移动,因此它位于路径下方。
- 最后,它被剪裁以完全位于路径内。
当然,中间步骤并没有被真正画出来。如果有人感兴趣的话,下面是我制作图像的方式:
\documentclass[tikz,margin=5pt]{standalone}
\usetikzlibrary{calc}
\begin{document}
\pgfdeclareverticalshading{myshading}{100bp}{color(0bp)=(red); color(49bp)=(red); color(51bp)=(green); color(100bp)=(green)}
\begin{tikzpicture}[scale=2]
\newcommand*\outline[1][draw]{
\path[#1]
($(c) + (0:1)$) coordinate (p1)
arc (0:30:1) coordinate (p2)
-- ($(c) + (30:1.2)$) coordinate (p3)
arc (30:0:1.2) coordinate (p4)
-- cycle;
\coordinate (sw) at (p1 -| p4);
\coordinate (ne) at (p2 |- p3);
\coordinate (center) at ($(sw)!.5!(ne)$);
\fill (c) circle (1pt);
\path[#1] (c) -- ($(c) + (15:1.2)$);
}
\coordinate (c) at (0,0);
\shade[shading=myshading] (c) +(-.5,-.5) rectangle +(.5,.5);
\outline
\node[below] at (c) {1};
\coordinate (c) at (2,0);
\shade[shading=myshading,shading angle=15] (c) +(-.5,-.5) rectangle +(.5,.5);
\outline
\node[below] at (c) {2};
\coordinate (c) at (4,0);
\outline[]
\shade[shading=myshading,shading angle=15] ($(sw) - (center) + (c)$) rectangle ($(ne) - (center) + (c)$);
\outline
\node[below] at (c) {3};
\coordinate (c) at (1,-2);
\outline[]
\shade[shading=myshading,shading angle=15] (sw) rectangle (ne);
\outline
\node[below] at (c) {4};
\coordinate (c) at (3,-2);
\outline[draw,shading=myshading,shading angle=15]
\node[below] at (c) {5};
\end{tikzpicture}
\end{document}