在其他圆圈上方绘制一些圆圈

在其他圆圈上方绘制一些圆圈

我想画一些这样的圆圈

界

我已经创建了 3 个圆圈,但我认为会有更好的解决方案。如果圆圈超过 6 个怎么办?我该如何绘制?

    \documentclass[10pt]{standalone}
    \usepackage{tkz-euclide}
    
    \begin{document}
    
    \pgfmathsetmacro{\radius}{1}
    \begin{tikzpicture}
       \tkzDefPoints{0/0/A,2*\radius/0/B}
       \tkzDefTriangle[equilateral](A,B)    \tkzGetPoint{C}
       \tkzDefPoint(0,-\radius){D}
       \tkzDefPoint(2*\radius,-\radius){E}
       \tkzDefShiftPoint[B](30:\radius){F}
       \tkzDefShiftPoint[C](30:\radius){G}
       \tkzDefShiftPoint[C](150:\radius){H}
       \tkzDefShiftPoint[A](150:\radius){I}
       
       
       \tkzDrawCircles[R](A,\radius cm B,\radius cm C,\radius cm)
        
        \tkzDrawSegments(D,E F,G H,I)
      
     \end{tikzpicture} 
     \end{document}

答案1

我给你提供了一个用 tikz 而不是 tkz-euclide 制作的简单解决方案。使用几个嵌套\foreach即可。你只需更改参数\num即可更改绘图中的行数。

\documentclass[tikz,border=2mm]{standalone}
\usetikzlibrary{calc}

\begin{document}
\begin{tikzpicture}[line cap=round]
  \def\num{4} % number of rows
  \def\r  {1} % circle radius
  \foreach\i in {1,...,\num}
  {
    \pgfmathsetmacro\y{-sqrt(3)*\r*\i}
    \foreach\j in {1,...,\i}
    {
      \pgfmathsetmacro\x{\r*(2*\j-\i)}
      \draw (\x,\y) circle (\r);
      \fill (\x,\y) circle (0.1*\r);
      \coordinate (C-\j-\i) at (\x,\y);
    }
  }
  \draw ($(C-1-1)   +(150:\r)$) -- ($(C-1-\num)   +(150:\r)$);
  \draw ($(C-1-1)   + (30:\r)$) -- ($(C-\num-\num)+ (30:\r)$);
  \draw ($(C-1-\num)+(270:\r)$) -- ($(C-\num-\num)+(270:\r)$);
\end{tikzpicture}
\end{document}

在此处输入图片描述

答案2

这是 tkz-euclide 的答案。您已经考虑过使用好的工具来编写此代码。\tkzDefShiftPoint是正确的宏。

\documentclass[margin=12pt]{standalone}
 \usepackage{tkz-euclide}
    
\begin{document}
  \pgfmathsetmacro{\num}{4}
  \pgfmathsetmacro{\r}{1}
\begin{tikzpicture}
   \foreach \j in {1,...,\num}{% the circles
   \tkzDefPoint(60:2*\j){c} 
   \pgfmathsetmacro{\k}{\num-\j+1}
    \foreach \i in {1,...,\k} {%
      \tkzDrawCircle[R](c,\r)
      \tkzDefShiftPoint[c](2,0){c}}}
     % the lines : 
    \tkzDefPoint(60:2){tmp} 
    \tkzDefShiftPoint[tmp](150:\r){ca}
    \tkzDefShiftPoint[ca](60:6*\r){ta}
    \tkzDefShiftPoint[tmp](-90:\r){cb}
    \tkzDefShiftPoint[cb](0:6*\r){tb}
    \tkzDefShiftPoint[tmp](30:\r){cc}
    \tkzDefShiftPoint[cc](0:6*\r){cc}
    \tkzDefShiftPoint[cc](120:6*\r){tc}
    \tkzDrawSegments(ca,ta cb,tb cc,tc)
 \end{tikzpicture} 
\end{document}

在此处输入图片描述

相关内容