![递归绘制流形的定向平铺](https://linux22.com/image/375703/%E9%80%92%E5%BD%92%E7%BB%98%E5%88%B6%E6%B5%81%E5%BD%A2%E7%9A%84%E5%AE%9A%E5%90%91%E5%B9%B3%E9%93%BA.png)
答案1
我定义了一个命令\arrowManifold
,它tikzpicture
使用嵌套的 -循环创建带有箭头的。要将一个矩形分成 4 个较小的矩形,需要使用-packageforeach
计算 参数的 2 的幂。\arrowManifold
calculator
在文档中,该命令被调用以实现不同的递归级别。
代码:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\usetikzlibrary{arrows}
\usepackage{calculator}
\newcommand{\arrowManifold}[2][1]{
% #1 = scale
% #2 = recursion
\POWER{2}{#2}{\n}
\begin{tikzpicture}[->,>=stealth',scale=#1*1/\n]
\foreach \y in {1, ..., \n} {
\foreach \x in {1, ..., \n} {
\draw (\x-.1,\y+.9) -- (\x-.9,\y+.9);
\draw (\x-.9,\y+.9) -- (\x-.9,\y+.1);
\draw (\x-.9,\y+.1) -- (\x-.1,\y+.1);
\draw (\x-.1,\y+.1) -- (\x-.1,\y+.9);
}
}
\end{tikzpicture}
}
\begin{document}
\foreach \i in {0, ..., 3} {
\begin{figure}
\centering
\arrowManifold[3]{\i}
\caption{Arrow-manifold \i}
\end{figure}
}
\end{document}
结果:
答案2
这是 Lindenmayer 系统解决方案,结合show path construction
装饰,将 l 系统路径中的所有段稍微向左移动、稍微缩短并带有箭头。
\documentclass[tikz,border=7pt]{standalone}
\usetikzlibrary{lindenmayersystems,decorations.pathreplacing,calc}
\tikzset{
% use of `show path construction` to draw all edges of the Lindenmayer systems
edges/.style = {
decoration={
show path construction,
lineto code={
\draw[-latex,#1] ($(\tikzinputsegmentfirst)!.1!35:(\tikzinputsegmentlast)$)
-- ($(\tikzinputsegmentlast)!.1!-35:(\tikzinputsegmentfirst)$);
}
},
decorate
},
% define the Lindenmayer systems
l-rect/.style = {
l-system={rule set={F ->F[+F+F+F]f,f->ff}, axiom=F, order=#1,step=1cm},
}
}
\begin{document}
\begin{tikzpicture}
\path[edges=purple]
l-system [l-rect=1]
[xshift=2cm] l-system [l-rect=2]
[xshift=3cm] l-system [l-rect=3];
\end{tikzpicture}
\end{document}