附录

附录
\documentclass[tikz, border=1cm]{standalone}
\begin{document}
\begin{tikzpicture}
\begin{scope}[rotate=-{30}]
\draw (0,0)--(0,4)--(4,4)--(4,2)--(6,2)--(6,0)--(4,0)--(4,-2)--(2,-2)--(2,0)--cycle;
\draw (2, 0)--++(2,0);
\draw (0, 2)--++(4,0);
\draw (2,4)--++(0,-4);
\draw (4,2)--++(0,-2);
\end{scope}
\end{tikzpicture}
\end{document}

在此处输入图片描述

  1. 围绕该形状绘制一个矩形以使其接触最左、最右、最上、最下点的正确方法是什么?
  2. 我感觉我还没有系统地构建非规则形状。我怎样才能做得更好?
  3. [对托比昂的最初回答的补充] 我怎样才能填充边界框,但排除里面的形状?我怎样才能从形状到边界框画一条线。)

答案1

一个简单的方法是使用该fit库以及local bounding box

在此处输入图片描述

\documentclass[tikz, border=1cm]{standalone}
\usetikzlibrary{fit}
\begin{document}
\begin{tikzpicture}
\begin{scope}[rotate=-{30},local bounding box=a]
\draw (0,0)--(0,4)--(4,4)--(4,2)--(6,2)--(6,0)--(4,0)--(4,-2)--(2,-2)--(2,0)--cycle;
\draw (2, 0)--++(2,0);
\draw (0, 2)--++(4,0);
\draw (2,4)--++(0,-4);
\draw (4,2)--++(0,-2);
\end{scope}
\node [fit=(a),inner sep=0pt,draw] {};
\end{tikzpicture}
\end{document}

或者,给定local bounding box,使用rectangle路径:

\documentclass[tikz, border=1cm]{standalone}
\begin{document}
\begin{tikzpicture}
\begin{scope}[rotate=-{30},local bounding box=a]
\draw (0,0) |- (4,4) |- (6,2) |- (4,0) |- (2,-2) |- cycle;
\draw (4, 0) -| (2,4)
      (0,2) -| (4,0);
\end{scope}
\draw (a.south west) rectangle (a.north east);
\end{tikzpicture}
\end{document}

(这显示使用-|/|-路径将坐标数量减少一半。)

如果多次绘制相同的线条不是问题的话,您可以使用这样的循环来绘制形状:

\documentclass[tikz, border=1cm]{standalone}
\begin{document}
\begin{tikzpicture}
\begin{scope}[rotate=-{30},local bounding box=a]
\foreach \x/\y in {1/0,0/1,1/1,2/1,0/2,1/2} % list of rectangle centers
   \draw (\x-0.5, \y-0.5) rectangle ++(1,1);
\end{scope}
\draw (a.south west) rectangle (a.north east);
\end{tikzpicture}
\end{document}

附录

也许满足您额外要求的最简单方法是使用节点制作正方形,使用fit节点制作矩形。通过用白色填充节点,并使用用其他颜色on background layer填充fit节点,您可以获得所需的外观。如果您实际上只想填充形状和矩形之间的区域,则需要使用\clipscope我实际上建议您提出一个新问题。

因为一切都是节点,所以在内部正方形和外部矩形之间画线很容易,只需使用节点锚点作为坐标即可。

在此处输入图片描述

\documentclass[tikz, border=1cm]{standalone}
\usetikzlibrary{backgrounds,fit}
\begin{document}
\begin{tikzpicture}
\begin{scope}[rotate=-{30},local bounding box=a]
\foreach [count=\i] \x/\y in {1/0,0/1,1/1,2/1,0/2,1/2} % list of rectangle centers
   \node [transform shape, % allow for rotation
          draw, % draw outline
          fill=white, % fill with white
          minimum size=1cm, % set size
          name=n-\i,
          %label=center:n-\i % if you want to see the names of the nodes, uncomment this
          ] at (\x-0.5, \y-0.5) {};
\end{scope}
\scoped[on background layer] % the following path is on the background layer
  \node [draw=black, fill=blue!10, fit=(a), inner sep=0.2pt, name=frame] {};


\draw [-latex] (frame.280) to[bend right] (n-1);
\draw (frame.east) -- (n-3.north east);

\end{tikzpicture}
\end{document}

相关内容