扩大

扩大

请帮帮我,我试图并排绘制许多多边形,但是没有成功!

这就是我要的在此处输入图片描述

我的 MWE:

\documentclass{article}
\usepackage{xcolor}
\usepackage{pgf,tikz}
\usetikzlibrary{shapes,arrows,shadows,patterns,shapes.geometric,calc}
\begin{document}

\tikzset{poly/.style={regular polygon, regular polygon sides=6,fill=gray!10,minimum size=2 cm, draw}}

\tikzset{poly1/.style={regular polygon, regular polygon sides=6,fill=gray!30,minimum size =2cm, draw}}
\begin{tikzpicture}[scale=0.7]
\draw [help lines,gray!50,step =0.5] (-10,-10) grid (10,10);
\draw[red,-{stealth}](-10,0)--(10,0);
\draw[green!60!black,-{stealth}](0,-10)--(0,10);
\node [poly] at (2,2) {C7};
\node [poly] at (2,-0.5) {C6};
\node [poly1,rotate=-90] at (4.2,3.25) {C7};
\end{tikzpicture}
\end{document}

有什么建议吗?

答案1

如果要使用多边形节点,可以使用锚点.corner来定位它们。以下是一组:

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

\tikzset{
  my poly/.style={regular polygon, regular polygon sides=6,fill=gray!#1,minimum size=2cm, draw},
}

\begin{tikzpicture}[node distance=0pt, every node/.style={outer sep=0pt}]
  \draw [help lines,gray!50,step =0.5] (-10,-10) grid (10,10);
  \node (1-C1) [my poly=10] {C1};
  \foreach \i/\j/\k/\m in {4/2/2/30,3/1/3/10,2/6/4/10,1/5/5/10,6/4/6/10,5/3/7/10}
  \node (1-C\k) [my poly=\m, anchor=corner \i] at (1-C1.corner \j) {C\k};
\end{tikzpicture}
\end{document}

一组多边形

节点已命名,因此您可以使用外部多边形的角来放置下一个节点,依此类推。例如,(1-C1), (1-C2)...

扩大

事实上,如果你使用C2作为初始节点,而不是C1,那么你可以使用第二个外循环来定位和绘制另外 7 个六边形,构建 7×7 的整体图像。例如:

\documentclass[tikz,border=10mm]{standalone}
\usetikzlibrary{shapes.geometric,positioning}
\begin{document}
\tikzset{
  my poly/.style={regular polygon, regular polygon sides=6,fill=gray!#1,minimum size=2cm, draw},
}
\begin{tikzpicture}[node distance=0pt, every node/.style={outer sep=0pt}]
  \foreach \a/\b/\c/\d [count=\hexset, remember=\hexset] in {2/0/0/0,2/1/4/6,1/1/5/3}
  {
    \ifnum\hexset>1
      \node (\hexset-C2) [my poly=30, anchor=corner \a] at (\b-C\c.corner \d) {C2};
    \else
      \node (1-C2) [my poly=30] {C2};
    \fi
    \foreach \i/\j/\k [remember=\k as \savedhex (initially 2)] in {3/5/3,2/4/4,1/3/5,5/3/6,5/1/7,3/5/1}
    \node (\hexset-C\k) [my poly=10, anchor=corner \i] at (\hexset-C\savedhex.corner \j) {C\k};
  }
\end{tikzpicture}
\end{document}

7×7 六边形

外循环(变量\a/\b/\c/\d:)用于将每组 7 个六边形相对于之前的组进行定位(当前组是第一个要绘制的组时除外)。这是通过使用C2一种锚定六边形来完成的。因此,变量指定哪个.corner锚点应与前一组六边形中的哪个六边形C2对齐。.corner

在示例中,{2/0/0/0,2/1/4/6,1/1/5/3}绘制 3 组 7 个六边形:

  • 第一组被指定为,2/0/0/0但是这里的值没有区别,因为没有什么可以与该组对齐。

  • 第二个是2/1/4/6。这意味着 C22在新六边形集合中的角锚将与集合1:六边形 C 4:角对齐6,即(1-C4.corner 6)

  • 第三个是1/1/5/3。这意味着 C21在新六边形集合中的角锚将与集合1:六边形 C 5:角对齐3,即(1-C5.corner 3)。如果我们想与第二组中的某个对象对齐,我们将使用?/2/?/?

这允许对六边形结构进行相当简洁的规范。

答案2

这是一个选项:

在此处输入图片描述

代码:

\documentclass[border=2pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{calc,matrix,shapes.geometric,backgrounds}

\colorlet{darkfill}{gray}
\colorlet{lightfill}{gray!60}

\tikzset{myhex/.style={
  draw,
  outer sep=0pt,
  regular polygon,
  regular polygon sides=6,
  minimum size=2cm,
  font=\sffamily,
%  xscale=1.5
  }
}
\newcommand\FillHexagon[2]{
\begin{pgfonlayer}{background}
\fill[darkfill]
  (#1.corner 1) --
  (#1.corner 2) --
  (#1.corner 3) --
  (#1.corner 4) --
  (#1.corner 5) --
  (#1.corner 6);
\ifdim#2pt=0pt\relax
\else
  \ifdim#2pt<0.5pt\relax
  \fill[lightfill]
    (#1.corner 4) --
    ( $ (#1.corner 4)!2*#2!(#1.corner 3) $ ) --
    ( $ (#1.corner 5)!2*#2!(#1.corner 6) $ ) --
    (#1.corner 5) -- cycle;
  \else
    \ifdim#2pt>0.5pt\relax
  \fill[lightfill]
    (#1.corner 4) --
    (#1.corner 3) -- 
    ( $ (#1.corner 3)!2*#2-1!(#1.corner 2) $ ) --
    ( $ (#1.corner 6)!2*#2-1!(#1.corner 1) $ ) --
    (#1.corner 6) -- 
    (#1.corner 5) -- cycle; 
    \else
      \ifdim#2pt=0.5pt\relax
        \fill[lightfill]
          (#1.corner 4) --
          (#1.corner 3) --
          (#1.corner 6) --
          (#1.corner 5) -- cycle;
      \else
      \fi
    \fi  
  \fi
\fi
\end{pgfonlayer}
}

\begin{document}

\begin{tikzpicture}
\foreach \Nombre/\Shift in {1/{(0:0cm)},2/{(-49.2:4.58cm)},3/{(250.8:4.58cm)}}
{
  \node[myhex,shift={\Shift}]
    (center\Nombre)
    {C1};
  \foreach \Valor 
    [evaluate=\Valor as \Anchor using {int(mod(\Valor+2,6)+1)}] in {1,2,3,4,5,6}
    {
      \node[myhex,anchor=side \Anchor] 
        at (center\Nombre.side \Valor)
        (center\Nombre-\Valor) 
        {C\pgfmathprint{int(2+mod(6-mod(\Valor+5,6),6))}};  
    }
}
\FillHexagon{center1-1}{0}
\FillHexagon{center2-1}{0.1}
\FillHexagon{center3-1}{0.56}
\end{tikzpicture}

\end{document}
  • 命令

    \FillHexagon{<name>}{<factor>}
    

    允许使用两种不同的颜色填充给定的六边形(如问题图像中的两个六边形)。<factor>允许指定将用第二种颜色填充的六边形的比例。两种颜色由lightfill和控制darkfill;使用0填充六边形darkfill,使用1完全填充六边形lightfill

  • % xscale=1.5如果要沿 x 分量拉长六边形,请取消注释该行(并使用所需的因子)。

答案3

使用以下方式编译lualatex

\documentclass{article}

\usepackage[svgnames]{xcolor}
\usepackage{tikz}
\usepackage{luacode}



\begin{document}


\begin{tikzpicture}
\begin{luacode*}
cs=math.cos(math.pi/3)
ss=math.sin(math.pi/3)

function printcoord(x,y,s)
 tex.print(" (" .. x .. "," .. y .. ") " .. s )
 end

function drawpoly(tlx,tly,s,c)
 tex.print("\\draw[fill,color=" .. c .."] ")
 ox={0,1,1+cs,1,0,-cs}
 oy={0,0,-ss,-2*ss,-2*ss,-ss}
 for j=1,6  do printcoord(tlx+ox[j],tly+oy[j],"--") end
 tex.print("cycle; \\draw")
 printcoord(tlx+0.5,tly-ss," node{C" .. s .. "};")
 end

offx={ 0,0,1+cs,1+cs,0,-1-cs,-1-cs}
offy={ 0,2*ss,ss,-ss,-2*ss,-ss,ss}
col={"Beige","Green","Blue","Orange","Yellow","Magenta","Purple"}
coord= { {x=0, y=0 }, { x=1+cs, y=5*ss }, {x=3+3*cs, y=ss} }
for i,v in ipairs(coord) do for j=1,7 do  drawpoly(v.x+offx[j],v.y+offy[j],j,col[j])   end  end
 \end{luacode*}
\end{tikzpicture}

\end{document}

在此处输入图片描述

答案4

对于这个特定的图表,利用一些基本的几何图形,用两个简单的循环就能让事物变得相当紧凑。

\documentclass[tikz,border=5]{standalone} 
\usetikzlibrary{shapes.geometric}
\begin{document} 
\begin{tikzpicture}[every hexagon/.style={
  shape=regular polygon, regular polygon sides=6, inner sep=0, 
  minimum size=1cm, font=\sffamily, fill=gray!20, draw=white, thick},
  hexagon 2/.style={fill=blue!20}]
\foreach \j in {1,...,3}
  \foreach \i [evaluate={\a=210-\j*120+atan(sec(30)/6); \r=sqrt(7)/2;}] 
      in {1,...,7}
    \node [every hexagon/.try, hexagon \i/.try, shift=(\a:\r)]  
      at (210-\i*60:{(\i > 1)*cos(30)}) {C\i};
\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容