我正在尝试制作一个看起来逼真的连续土豆。这是我已经实现的,但我想通过旋转光影并使其变大来改善结果。有什么办法吗?
\documentclass[a4,10pt,fleqn]{scrartcl}
\usepackage{tikz}
\usetikzlibrary{shapes}
\usetikzlibrary{decorations.pathmorphing}
\usetikzlibrary{decorations.pathreplacing}
\usetikzlibrary{decorations.shapes}
\usetikzlibrary{decorations.text}
\begin{document}
\makeatletter
\pgfdeclareradialshading[tikz@ball]{ball}{\pgfqpoint{-20bp}{10bp}}{%
color(0bp)=(tikz@ball!0!white);
color(10bp)=(tikz@ball!0!white);
color(15bp)=(tikz@ball!70!black);
color(20bp)=(black!70);
color(30bp)=(black!70)}
\makeatother
\begin{tikzpicture}[>=stealth,
axis/.style={densely dashed,font=\small}]
\coordinate (K) at (3,1);
\shade[ball color= gray!10!white, opacity=.6] (K) plot [smooth cycle,tension=0.7] coordinates {(3,1) (5,1.2) (7,1) (8,3) (7,4.5) (5,4.5) (2,4) (1.7,2.5)};
\end{tikzpicture}
\end{document}
答案1
正如您所见,您使用的代码来自Yori 的回答到如何绘制阴影球体?.我喜欢Alain Matthes 的回答更好的:
\documentclass[tikz]{standalone}
\usetikzlibrary{shadings}
\pgfdeclareradialshading{ballshading}{
\pgfpoint{-10bp}{10bp}}
{color(0bp)=(gray!30!white);
color(9bp)=(gray!75!white);
color(18bp)=(gray!70!black);
color(25bp)=(gray!50!black);
color(50bp)=(black)}
\begin{document}
\begin{tikzpicture}
\coordinate (K) at (3,1);
\shade[shading=ballshading] (K) plot [smooth cycle,tension=0.7] coordinates {(3,1) (5,1.2) (7,1) (8,3) (7,4.5) (5,4.5) (2,4) (1.7,2.5)};
\end{tikzpicture}
\end{document}
现在回答您的实际问题,即如何旋转阴影或使其变大(更改光源位置)。阴影将从指定的\pgfpoint{<x>}{<y>}
(第一个参数\pgfdeclareradialshading
)开始,其中\pgfpoint{0}{0}
是土豆中心。阴影颜色将遵循第二个参数中给出的顺序,其中\pgfdeclareradialshading
括号中的尺寸是与指定 的径向距离\pgfpoint
。因此,通过更改 的值,\pgfpoint
您可以“旋转”阴影,例如将其更改为 会\pgfpoint{20bp}{10bp}
导致以下结果:
通过更改中的尺寸,()
您可以更改渐变本身,使较亮的区域变小或变大。暗区也是如此(亮区由两个color
语句定义,其中<num>!white
,暗区由<num>!black
定义)。请注意,这些尺寸与阴影形状的大小无关,它们是绝对的。使较亮区域变大的示例:按以下顺序使用\pgfpoint{10bp}{10bp}
和中的尺寸: ,您将得到以下结果(请注意,我将 增加到,因此白色区域会更大)。()
0bp
15bp
20bp
25bp
50bp
9bp
15b
为了更好地控制所有内容,可以声明一个sphere color
用于此阴影的颜色,通过更改此颜色,您可以更改阴影颜色,如下面的 MWE 所示。此外,由于阴影上的尺寸是绝对的,因此最好将最大值保持在形状大小范围内,因此我更改了尺寸以适应。
\documentclass[tikz]{standalone}
\usetikzlibrary{shadings}
\definecolor{sphere color}{RGB}{0,0,0}
\pgfdeclareradialshading[sphere color]{ballshading}{
\pgfpoint{6mm}{3mm}}
{color(0mm)=(sphere color!30!white);
color(4mm)=(sphere color!75!white);
color(8mm)=(sphere color!70!black);
color(12mm)=(sphere color!50!black);
color(15mm)=(black)}
\begin{document}
\begin{tikzpicture}
\coordinate (K) at (3,1);
\colorlet{sphere color}{blue}
\shade[shading=ballshading] (K) plot [smooth cycle,tension=0.7] coordinates {(3,1) (5,1.2) (7,1) (8,3) (7,4.5) (5,4.5) (2,4) (1.7,2.5)};
\end{tikzpicture}
\end{document}