pattern = sixpointed stars
我希望得到类似于(或fivepointed
;无所谓)提供的结果,但底层网格呈一定角度。我理解这一点无法做到直接使用模式库,所以我可能必须使用几个嵌套的 for 循环和一些剪辑来完成它。
有没有标准或简单的方法可以做到这一点?具体来说,获得一颗星星然后可以复制的最简单的方法是什么?
答案1
这个(非常)新的patterns.meta
库允许更轻松地指定模式,特别是允许将转换应用于模式图块。
它仍然处于开发阶段(尚无文档),仅支持 PDF 输出,并且仅在最新的 CVS 版本中可用,但或多或少是稳定的(所以您已经收到警告)。
\documentclass[tikz,border=5]{standalone}
\usetikzlibrary{patterns.meta}
\tikzdeclarepattern{name=Stars,
type=uncolored,
tile bounding box={(-5pt,-5pt) and (5pt,5pt)},
tiling size={(\tikztilesize, \tikztilesize)},
parameters={\tikzstarpoints,\tikzstarradius,\tikzstarrotate,\tikztilesize},
tiling transformation={rotate=\tikzstarrotate},
keys={
points/.store count=\tikzstarpoints, points=5,
radius/.store length=\tikzstarradius, radius=3pt,
rotate/.set macro=\tikzstarrotate, rotate=0,
tile size/.store length=\tikztilesize, tile size=10pt
},
code={
\pgfmathparse{180/\tikzstarpoints}\let\a=\pgfmathresult
\fill (90:\tikzstarradius) \foreach \i in {1,...,\tikzstarpoints}{
-- (90+2*\i*\a-\a:\tikzstarradius/2) -- (90+2*\i*\a:\tikzstarradius)
} -- cycle;
}
}
\begin{document}
\begin{tikzpicture}
\draw [pattern=Stars, pattern color=blue] (0,0) rectangle ++(2,2);
\draw [pattern={Stars[points=7, tile size=15pt]}] (2,0) rectangle ++(2,2);
\draw [pattern={Stars[rotate=45]}, pattern color=red] (0,2) rectangle ++(2,2);
\draw [pattern={Stars[rotate=30,points=4,radius=5]}] (2,2) rectangle ++(2,2);
\end{tikzpicture}
\end{document}