\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
一个简单的方法是使用该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
节点,您可以获得所需的外观。如果您实际上只想填充形状和矩形之间的区域,则需要使用\clip
,scope
我实际上建议您提出一个新问题。
因为一切都是节点,所以在内部正方形和外部矩形之间画线很容易,只需使用节点锚点作为坐标即可。
\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}