在 Asymptote 中,我可以使用函数创建径向渐变阴影,radialshade
该函数定义一个渐变,从中心为 cA、半径为 rA 的圆上的颜色 A 平滑地变为中心为 cB、半径为 rB 的圆上的颜色 B。但我发现自己需要沿途指定中间颜色阴影才能获得我想要的外观,例如,得到一个圆,其中心有一个小的白红色区域,外部有一个较大的深红色区域,中间有一个纯红色区域。我尝试通过以下方式组合两个径向阴影来实现这一点:
size(0,100);
path g=scale(2)*unitcircle;
pair A=(0.35,0.35), B=(0.6,0.6), C=(0,0);
radialshade(scale(1.1)*unitcircle,white,C,0,red,C,0.8);
radialshade(scale(1.0)*unitcircle^^g,red+evenodd,C,1,black,C,2);
输出结果如下:
这还不错,但我觉得这不是最优雅的做法。此外,我觉得过渡区域(一个径向阴影与另一个径向阴影相交的地方)并不像我希望的那样平滑。我想实现的另一件事是“椭圆”等效,radialshade
但我还没有找到解决方案。
我真的很喜欢 TikZ 的这种行为。在这里,我可以声明一个径向阴影,这样我就可以给出中间颜色以及它们的径向位置。此外,径向阴影还可以适应它们所使用的形状,以便以椭圆形的方式对椭圆进行着色。此外,还有一些很好的方法来扭曲阴影,即通过指定一个不同的中心,{0, 0}
在某些情况下非常方便(但当然,radialshade
也可以使用来实现这种效果)。示例:
\documentclass{standalone}
\usepackage[svgnames]{xcolor}
\usepackage{tikz}
\pgfdeclareradialshading{normal}{\pgfqpoint{0bp}{0bp}}{%
color(0bp)=(white);
color(10bp)=(red!90!black);
color(20bp)=(black!75!red);
color(30bp)=(black);
color(100bp)=(black)}
\pgfdeclareradialshading{distorted}{\pgfqpoint{10bp}{10bp}}{%
color(0bp)=(white);
color(10bp)=(red!90!black);
color(20bp)=(black!75!red);
color(30bp)=(black)}
\begin{document}
\begin{tikzpicture}
\shade [shading=normal] (-1, 3.5) circle (1.5cm);
\shade [shading=distorted] (3, 3.5) circle (1.5cm);
\shade [shading=normal] (-3, 0) ellipse (2 and 1.5);
\shade [shading=distorted] (2.00, 0.0) ellipse (2 and 1.5);
\shade [shading=normal] (5.00, -1.5) rectangle (7, 1.5);
\end{tikzpicture}
\end{document}
实现 TikZ 示例的外观的最佳方法是什么?
答案1
这个怎么样?
settings.outformat="pdf";
size(5cm);
import graph;
pen[] pens = new pen[] {white, 0.9*red + 0.1*black, 0.75*black + 0.25*red, black};
path outerpath = ellipse((0,0), 2, 1.5);
path innerpath = (1,0.8);
path midpath(path p1, path p2, real t) {
pair f(real s) {
return (1-t)*relpoint(p1, s) + t*relpoint(p2, s);
}
path p = graph(f, 0, 1, operator ..) -- cycle;
return p;
}
int lastpath = pens.length - 1;
path[] paths = new path[lastpath + 1];
for (int i = 0; i <= lastpath; ++i) {
paths[i] = midpath(innerpath, outerpath, i/lastpath);
}
draw(paths, pens);