我有一个问题,如何才能得到这张图片的最短的一组 tikz 代码?
我正在尝试优化此代码:
\documentclass{article}
\usepackage{amsmath}
\usepackage{tikz}
\begin{document}
La version de TikZ est : \pgfversion
\vfill
\begin{center}
\begin{tikzpicture}
%
\draw (0,1) -- (1,0);
\draw (1,0) -- (0,-1);
\draw (0,-1) -- (-1,0);
\draw (-1,0) -- (0,1);
\draw (0,0) circle (1);
\draw (0,1) circle (1);
\draw (0,-1) circle (1);
\draw (-1,0) circle (1);
\draw (1,0) circle (1);
%
\draw (0,2) -- (2,0);
\draw (2,0) -- (0,-2);
\draw (0,-2) -- (-2,0);
\draw (-2,0) -- (0,2);
\draw (0,0) circle (2);
\draw (0,2) circle (2);
\draw (0,-2) circle (2);
\draw (-2,0) circle (2);
\draw (2,0) circle (2);
\end{tikzpicture}
\end{center}
\end{document}
答案1
凡事皆有一条路。编辑:因为 AndréC 指责我抄袭了“他的”答案,所以这是原始答案:
\documentclass[tikz,border=3.14mm]{standalone}
\begin{document}
\begin{tikzpicture}
\draw[rotate=45] foreach \Y in {1,2}
{(0,0) circle[radius=\Y]
({-\Y/sqrt(2)},{-\Y/sqrt(2)}) rectangle ({\Y/sqrt(2)},{\Y/sqrt(2)})
foreach \X in {45,135,225,315}
{ (\X:\Y) circle[radius=\Y]}};
\end{tikzpicture}
\end{document}
客观地说:
- Paul Gaborit 的回答也是其中一条路。我应该在上面提到这一点。
- Paul Gaborit 在这里给出了第一个答案,我投了赞成票,并且使用了极坐标。
- 正如我们所见,我从一开始就使用了极坐标。
- 这个答案的新特点是两个嵌套的 foreach 循环和将旋转的矩形绘制为旋转的矩形。
- 另一方面,AndréC 的答案复制了我的两个循环。(我是在写完下面的代码很久之后才意识到“他的”答案的。)
\documentclass[tikz,border=3.14mm]{standalone}
\begin{document}
\begin{tikzpicture}
\draw[rotate=45] foreach \Y in {1,2}
{(0,0) circle[radius=\Y]
(45:\Y) rectangle (225:\Y)
foreach \X in {45,135,225,315}
{ (\X:\Y) circle[radius=\Y]}};
\end{tikzpicture}
\end{document}
答案2
这是一个解决方案(不是最短的):
\documentclass[tikz]{standalone}
\begin{document}
\begin{tikzpicture}
\draw
circle (1) circle(2)
(0:1) --(90:1) -- (180:1) -- (270:1) -- cycle
(0:1) circle(1) (90:1) circle(1) (180:1) circle(1) (270:1) circle(1)
(0:2) --(90:2) -- (180:2) -- (270:2) -- cycle
(0:2) circle(2) (90:2) circle(2) (180:2) circle(2) (270:2) circle(2);
\end{tikzpicture}
\end{document}
答案3
只是为了好玩:
\documentclass[tikz,margin=5mm]{standalone}
\begin{document}
\begin{tikzpicture}
\draw (0,0) circle (1) circle (2);
\foreach \t/\n in {0/1,90/2,180/3,270/4}{
\draw (\t:1)coordinate(\n) circle (1) ;}
\foreach \t/\m in {0/5,90/6,180/7,270/8}{
\draw (\t:2)coordinate(\m) circle (2) ;}
\draw (1)--(2)--(3)--(4)--cycle;
\draw (5)--(6)--(7)--(8)--cycle;
\end{tikzpicture}
\end{document}
答案4
虽然不如@marmot
优化的答案那么多,但可以尝试一下(不过为了好玩,提供了更多的旋钮):
\documentclass[tikz]{standalone}
\begin{document}
\begin{tikzpicture}[mystyle/.style={circle,draw,fill=none,minimum size=20, line width = 0.1pt}]
\foreach \x/\y/\z in {0/0/2,0/1/2,0/-1/2,-1/0/2,1/0/2,0/0/4,0/1/4,0/-1/4,-1/0/4,1/0/4}
\node [mystyle, minimum size = \z cm, color =black] (2) at (\x, \y) {};
\foreach \x/\y in {-0.7/0.7, -1.41/1.41}
\draw[rotate=45, line width = 0.1pt] (\x , \x ) rectangle (\y, \y);
\end{tikzpicture}
\end{document}
这使