更现实的连续土豆

更现实的连续土豆

我正在尝试制作一个看起来逼真的连续土豆。这是我已经实现的,但我想通过旋转光影并使其变大来改善结果。有什么办法吗?

\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 50bp9bp15b

在此处输入图片描述

为了更好地控制所有内容,可以声明一个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}

在此处输入图片描述

相关内容