我想画一些这样的圆圈
我已经创建了 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}