我正在尝试绘制一个平铺图案,使用更简单的元素构建它pic
。
这是我的代码的简化版本
\documentclass[tikz,border=2mm]{standalone}
\usepackage{tikz}
\begin{document}
\tikzset{
one/.pic = {
\draw [thin,blue] (0,0) -- (1,0) -- (1,1) -- cycle;
\draw [red] (1,0) -- ({1/(2+sqrt(2)},{1/(2+sqrt(2)});
},
two/.pic = {
\path pic {one} pic[rotate=90,yscale=-1] {one};
}
}
\begin{tikzpicture}
% pic one
\path pic {one} ;
\end{tikzpicture}
\begin{tikzpicture}
% pic two
\path pic {two} ;
\end{tikzpicture}
\begin{tikzpicture}
% pic two
\path pic {one} pic[rotate=90,yscale=-1] {one};
% pic two with extra 90 degree rotation
\path pic [rotate=90] {one} pic[rotate=180,yscale=-1] {one};
\end{tikzpicture}
\begin{tikzpicture}
% pic two
\path pic {two};
% pic two with extra 90 degree rotation
\path pic[rotate=90] {two};
% this doesn't do what I expected
\end{tikzpicture}
\end{document}
它画了四幅图。第一幅是基本元素。
pic
第二个是使用第一个元素绘制的第二个元素的旋转和反射
第三个仅使用第一个 pic 元素来绘制第二个 pic 元素的两个副本,其中一个旋转了 90 度。
第四个尝试做同样的事情,使用第二个pic
并将其旋转 90 度。
为什么不起作用?我怎样才能绘制旋转版本pic {two}
?有没有更好的方法?
(我实际上正在尝试绘制一个更复杂的图案;这是一个简化版本。)
编辑并添加:
这是我正在尝试制作的最终“图案”的一个版本。它不是填充意义上的 Tikz“图案”,尽管我认为它可以是(抱歉造成混淆)。它是基于伊斯兰设计原则的几何图案。这是原文。
答案1
如果要转换pic
嵌套在另一个中的pic
,则需要添加transform shape
。如果添加该键,则得到
\documentclass[tikz,border=2mm]{standalone}
\usepackage{tikz}
\begin{document}
\tikzset{
one/.pic = {
\draw [thin,blue] (0,0) -- (1,0) -- (1,1) -- cycle;
\draw [red] (1,0) -- ({1/(2+sqrt(2)},{1/(2+sqrt(2)});
},
two/.pic = {
\path pic {one} pic[rotate=90,yscale=-1] {one};
}
}
\begin{tikzpicture}
% pic one
\path pic {one} ;
\end{tikzpicture}
\begin{tikzpicture}
% pic two
\path pic {two} ;
\end{tikzpicture}
\begin{tikzpicture}
% pic two
\path pic {one} pic[rotate=90,yscale=-1] {one};
% pic two with extra 90 degree rotation
\path pic [rotate=90] {one} pic[rotate=180,yscale=-1] {one};
\end{tikzpicture}
\begin{tikzpicture}
% pic two
\path pic {two};
% pic two with extra 90 degree rotation
\path[transform shape] pic[rotate=90] {two};
% this doesn't do what I expected
\end{tikzpicture}
\end{document}
既然你想设计一个模式:你知道patterns.meta
最近添加到 pgfmanual 中的库的文档吗?这可能是更简单的方法。