在 tikz 中填充形状

在 tikz 中填充形状

如何填充由不同命令组合绘制的 tikz 中的形状?我的意思是这样的:

\documentclass[border=5pt]{standalone}
\usepackage{tikz}
\begin{document}
\newcommand{\mk}{node [fill=black] {}}
\begin{tikzpicture}
\coordinate (O) at (0,0);
\foreach \x in {0,60,...,359}
    {\draw (O) -- (\x:1);}
\foreach \x in {0,60,...,359}
    {\draw (\x:1) -- +(\x+30:1);}
\foreach \x in {0,60,...,359}
    {\draw (\x:1) -- +(\x-30:1);}
\foreach \x in {0,60,...,359}
    {\draw (\x:1)++(\x+30:1) -- +(\x:1);}
\foreach \x in {0,60,...,359}
    {\draw (\x:1)++(\x-30:1) -- +(\x:1);}
\foreach \x in {0,60,...,359}
    {\draw (\x:1)++(\x+30:1)++(\x:1) -- +(\x-30:1);}
\foreach \x in {0,60,...,359}
    {\draw (\x:1)++(\x-30:1)++(\x:1) -- +(\x+30:1);}
\foreach \x in {0,60,...,359}
    {\draw (\x:1)++(\x+30:1) -- +(\x+60:1);}
\foreach \x in {0,60,...,359}
    {\draw (\x:1)++(\x-30:1) -- +(\x-60:1);}
\foreach \x in {0,60,...,359}
    {\draw (\x:1)++(\x+30:1)++(\x+60:1) --
     ++(\x-30:1) -- ++(\x-60:1) -- ++(\x-120:1) -- +(\x-150:1);}
\foreach \x in {0,60,...,359}
    {\draw (\x:1)++(\x+30:1)++(\x:1)++(\x-30:1)
    -- ++(\x+30:1) -- ++(\x+90:1) -- ++(\x+150:1);}
\foreach \x in {0,60,...,359}
    {\draw (\x:1)++(\x+30:1)++(\x:1)++(\x-30:1)
    -- ++(\x-30:1) -- ++(\x-90:1) -- ++(\x-150:1);}
\draw (0,0) circle (5);
\end{tikzpicture}
\end{document}

上述代码产生以下输出:

(输出图像)

现在我想用任意颜色填充它的不同部分,我该怎么做?

答案1

正如 Hans-Peter E. Kristiansen 在他的评论中所建议的那样,当您确切知道要填充的内容时,您可以添加执行填充的代码,而无需触及其余代码。 这样,有些线会被绘制两次,您的代码会变得更长。

另一方面,我建议重写代码并利用宏使其更短。由于我不确定您想要填充什么,我已经填充了所有可能的选择。请注意\hex产生花朵六边形花瓣的构建块。还要注意,如果您想填充一个区域(例如,我称之为花朵的轮廓或六边形块本身),则不能将其分解成更小的连接形状:\draw ... \foreach ...如果必须,请使用。

绘图tikz-pgf就像编程一样。你不会只想一些完成任务的代码。您需要简短、可读、可维护且高效的代码来完成任务。

\documentclass[border=5pt]{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\coordinate (O) at (0,0);
% the building block
\newcommand\hex[1]{%
  -- ++(#1:1) -- ++(#1+30:1) -- ++(#1+60:1)
  -- ++(#1+180:1) -- ++(#1+210:1) -- cycle
}
% the outer circle
\draw[fill=orange!25!white] (0,0) circle (5);
% the flower's outline
\draw[fill=lightgray] (0:1)++(-30:1)++(-60:1)
  \foreach \x in {0,60,...,359}
    { -- ++(\x+30:1) -- ++(\x+60:1) -- ++(\x+120:1) -- ++(\x+150:1) };
% the inner flower
\foreach \x in {0,60,...,359} \draw[fill=yellow] (0,0) \hex{\x};
% the petals of the outer flower
\foreach \x in {0,60,...,359} \draw[fill=green] (\x:1) \hex{\x-30};
% the outer lines
\foreach \x in {0,60,...,359} {
  \draw (\x:1)++(\x+30:1)++(\x:1)++(\x-30:1) -- ++(\x+30:1) -- ++(\x+90:1) -- ++(\x+150:1);
  \draw (\x:1)++(\x+30:1)++(\x:1)++(\x-30:1) -- ++(\x-30:1) -- ++(\x-90:1) -- ++(\x-150:1);
}
\end{tikzpicture}
\end{document}

结果

相关内容