如何画一圈六边形?

如何画一圈六边形?

我可以使用六边形编号平铺平面设计:Ignasi

在此处输入图片描述

现在我想绘制或突出显示以包含数字 1 的图块为中心的六边形环,如下所示:
在此处输入图片描述

我怎样才能做到这一点?

答案1

我不这样做tikz,但无论如何我都觉得这很有趣。因此,我创建了一个\fillcrit绘制橙色六边形的宏,使用序言顶部的几个调整后的参数值。然后,在中tikzpicture,我只需执行\node at (6,6) {\fillcrit}; 创建六边形的循环(这样它就不会覆盖可能放置在其中的任何文本)。

编辑:我已经将每个六边形的坐标添加到图片中,以显示橙色六边形不会覆盖六边形标签,并验证橙色六边形是否以 (6,6) 为中心,即指定的位置。

\documentclass[border=2mm, tikz]{standalone}
\usepackage{marvosym,stackengine,scalerel}
%RELEVANT PARAMETERS FOR \fillcrit
\setstackgap{L}{8.65mm}% baselineskip for orange hex stack
\def\colorhexht{8.65mm} % height of orange hex itself
\def\boxraze{-3.6pt}   % vertical shift of \Hexasteel for proper vertical centering
%THE FOLLOWING SHOULD NOT NEED ADJUSTMENT
\def\hshft{-.14\dimexpr\Lstackgap}% negative shift to get orange hex columns to mesh together
%%%
\def\hex{\color{orange}{\makebox[\Lstackgap]{\raisebox{\boxraze}{\scaleto{%
  \mbox{\Hexasteel}}{\colorhexht}}}}}
\def\fillcrit{% 
  \Centerstack{\hex{} \hex}\kern\hshft%
  \Centerstack{\hex{} \hex{} \hex}\kern\hshft%
  \Centerstack{\hex{} \hex}%
}
\usetikzlibrary{shapes.geometric}
\begin{document}

%
% x=3*(minimum size)/2
% x=\sqrt{3/4}*(minimum size)/2
%
\begin{tikzpicture}[x=7.5mm,y=4.34mm]
  % some styles
  \tikzset{
    box/.style={
      regular polygon,
      regular polygon sides=6,
      minimum size=10mm,
      inner sep=0mm,
      outer sep=0mm,
      rotate=0,
    draw
    }
  }
  \tikzset{
    fillbox/.style={
      regular polygon,
      regular polygon sides=6,
      minimum size=10mm,
      inner sep=0mm,
      outer sep=0mm,
      rotate=0,
    draw
    }
  }

\node at (6,6) {\fillcrit};
\foreach \i in {0,...,5} 
    \foreach \j in {0,...,5} {
            \node[box] at (2*\i,2*\j) {%
               \makebox[0pt]{\the\numexpr\i+\i,\the\numexpr\j+\j}};
            \node[box] at (2*\i+1,2*\j+1) {%
               \makebox[0pt]{\the\numexpr\i+\i+1,\the\numexpr\j+\j+1}};
        }
\end{tikzpicture}

\end{document}

在此处输入图片描述

上述代码已重新编辑,将调整参数的数量从 4 个减少到 3 个(\hshft以前可调的值现在固定为 ,.14\Lstackgap约为\Lstackgap/(4*sqrt[3]))。因此,\colorhexht橙色框的高度可以重置为 ,例如 8.1 毫米,而无需任何额外的参数调整,以获得以下结果:

在此处输入图片描述

答案2

如果您了解元素(0,0)位于左下角,每个元素x+1向右移动一列并向y+2上移动一行,那么很容易构建一个\fillaround命令来填充(在六角形网格顶部绘制)中心六边形及其周围的所有六个元素。

\documentclass[border=2mm, tikz]{standalone}
\usetikzlibrary{shapes.geometric}
\begin{document}

%#1 - optional argument to change fill color and dimensions
%#2 - x coordinate of central hexagon
%#3 - y coordinate of central hexagon
\newcommand{\fillaround}[3][fill=green!30]{
\node[filledhex,#1] at (#2,#3) {};
\node[filledhex,#1] at (#2,#3+2) {};
\node[filledhex,#1] at (#2-1,#3+1) {};
\node[filledhex,#1] at (#2-1,#3-1) {};
\node[filledhex,#1] at (#2,#3-2) {};
\node[filledhex,#1] at (#2+1,#3-1) {};
\node[filledhex,#1] at (#2+1,#3+1) {};
}

%
% x=\sqrt{3/4}*minimum size
% y=3/4*minimum size
%
\begin{tikzpicture}[x=7.5mm,y=4.34mm]
  % some styles
  \tikzset{
    box/.style={
      regular polygon,
      regular polygon sides=6,
      minimum size=10mm,
      inner sep=0mm,
      outer sep=0mm,
      rotate=0,
    draw
    },
    filledhex/.style={
        box,
        minimum size=9mm,
        draw=none,
        fill=green!30
    }
  }

\foreach \i in {0,...,5} 
    \foreach \j in {0,...,5} {
            \node[box] at (2*\i,2*\j) {};
            \node[box] at (2*\i+1,2*\j+1) {};
        }

\fillaround{4}{4}
\fillaround[fill=red!50, minimum size=8mm]{8}{8}
\end{tikzpicture}

\end{document}

在此处输入图片描述

相关内容