我需要创建如附件所示的图片。我知道如何创建六边形子结构,其代码可在此问题中找到:tikz 中的双曲多面体
请帮助我,因为我是 tikz 新手。
编辑:将细分的二十面体映射到平面的函数在 5 度顶点处的行为类似于 $z^{6/5}$(在此表示为 $v$)。
答案1
你可以用\foreach
循环来绘制这样的网格。
\documentclass[tikz,border=3.14mm]{standalone}
\usetikzlibrary{shapes.geometric,calc}
\begin{document}
\begin{tikzpicture}[web/.style={append after command={foreach \XX in {1,...,#1}
{(current.corner \XX)
-- (current.center)}},regular polygon,regular polygon sides=#1,minimum
size=1cm,draw,alias=current},
pics/outerior/.style={code={
\pgfmathtruncatemacro{\idiv}{pow(2,#1-1)}
\draw (90:#1*0.5) foreach \XX in {1,...,5}
{-- (90+72*\XX:#1*0.5) coordinate (P-\XX)};
\draw (90:#1*0.5+0.5) foreach \XX in {1,...,5}
{-- coordinate[midway] (M-\XX) (90+72*\XX:#1*0.5+0.5) coordinate (Q-\XX)};
\foreach \XX [remember=\XX as \YY (initially 5)] in {1,...,5}
{\draw (P-\XX) -- (Q-\XX);
\foreach \ZZ in {0,...,#1}
{\draw ($(Q-\XX)!{(\ZZ+1)/(#1+1)}!(Q-\YY)$) -- ($(P-\XX)!{\ZZ/#1}!(P-\YY)$) --
($(Q-\XX)!{\ZZ/(#1+1)}!(Q-\YY)$) ;}
}
}}]
\draw (0,0) node[web=5] (c5) {};
\clip (-3,-3) rectangle (3,3);
\draw foreach \X in {1,...,9} {(0,0) pic{outerior=\X}};
\end{tikzpicture}
\end{document}
PS 您的处方似乎并没有在使用正多边形时产生绘制的格子(也没有引入通过自动添加内部线的多边形)append after command
。
\documentclass[tikz,border=3.14mm]{standalone}
\usetikzlibrary{shapes.geometric,calc}
\begin{document}
\begin{tikzpicture}[web/.style={append after command={foreach \XX in {1,...,#1}
{(current.corner \XX)
-- (current.center)}},regular polygon,regular polygon sides=#1,minimum
size=1cm,draw,alias=current}]
\draw (0,0) node[web=5] (c5) {};
\foreach \X [remember=\X as \Y (initially 5)] in {1,...,5}
{\draw
let \p1=($(c5.corner \Y)-(c5.corner \X)$),\n1={atan2(\y1,\x1)}
in ($(c5.corner \Y)!0.5!(c5.corner \X)$) coordinate (aux)
($(aux)!{-(1/2)*1cm}!90:(c5.corner \X)$)
node[web=6,minimum size=6cm/5,rotate=\n1]{};}
\end{tikzpicture}
\end{document}
答案2
这个网格结构是用 Delaunay 三角剖分法生成的。大家知道这个方法比较复杂。luamesh
这个网格结构是用马克西姆·丘平是在 TeX/LaTeX 中使用 Delaunay 三角剖分的伟大作品。
钛钾基于 z 的软件包luamesh
可以从以下位置下载这里. 在网站页面中,点击下载链接,如下图所示。
将 zip 文件解压到一个目录中。您将看到一个名为 的目录scripts
。此目录中的文件是lua
包所需的脚本。编写如下代码并将其保存在scripts
目录中。
\documentclass[margin=3.1415mm]{standalone}
\usepackage{luamesh}
\begin{document}
\meshPolygon[
tikz,
color = blue!70,
%meshpoint = \alpha,
colorPolygon=black,
scale=4cm,
step=mesh,
% print=points,
gridpoints=perturb
]
{(0,0);(1,0);(1,1);(0,1)}
\end{document}
附录:
您可以使用值调整网格密度h
。网格参数,它是网格的单位距离。如有必要,边界将被细化以获得尊重距离约束的点。默认值为 0.2。将参数添加h
到\meshPolygon
环境中,例如:
\meshPolygon[
tikz,
color = blue!70,
%meshpoint = \alpha,
colorPolygon=black,
scale=4cm,
step=mesh,
% print=points,
gridpoints=perturb,
h=0.1
]
{(0,0);(1,0);(1,1);(0,1)}