重疊填充

重疊填充

我想創建一個代表一堆矩形的圖形。理想情況下,我希望使用像 \stack{5} 這樣的簡單命令來建立 5 個堆疊。

我可以使用以下程式碼:

\draw[fill=blue] (0.4,-0.4) rectangle +(3,2);
\draw[fill=blue] (0.3,-0.3) rectangle +(3,2);
\draw[fill=blue] (0.2,-0.2) rectangle +(3,2);
\draw[fill=blue] (0.1,-0.1) rectangle +(3,2);
\draw[fill=blue] (0.0,-0.0) rectangle +(3,2);

在此輸入影像描述

然而,似乎很難將其轉化為命令,如果我們需要圍繞它移動堆疊,則更改所有座標會很麻煩。我想這可能會更好:

\draw[fill=blue] (0.4,-0.4)
  rectangle +(3,2) ++(-0.1,0.1)
  rectangle +(3,2) ++(-0.1,0.1)
  rectangle +(3,2) ++(-0.1,0.1)
  rectangle +(3,2) ++(-0.1,0.1)
  rectangle +(3,2) ++(-0.1,0.1);

在此輸入影像描述

這樣做的好處是,移動它只會改變一個明顯位置的座標,並且更清楚地了解其意圖。

不幸的是,第二個版本首先填入所有矩形,然後繪製它們的輪廓,因此「頂部」矩形不會覆蓋堆疊的其餘部分。

有沒有簡單的方法可以使用相對繪製指令繪製重疊區域?

答案1

這是一個解決方案,它利用了使用該命令建立的路徑edge是獨立的,因此是單獨繪製的事實。路徑edge與路徑一樣靈活,to因此可以適用於繪製幾乎任何東西,包括矩形。因此,我們定義了一個新的呼叫樣式to pathedge它。

\documentclass{article}
%\url{http://tex.stackexchange.com/q/68555/86}
\usepackage{tikz}

\tikzset{
  edge rectangle/.style={
    to path={ rectangle (\tikztotarget)}
  }
}

\begin{document}
\begin{tikzpicture}
\draw[every edge/.append style={edge rectangle,fill=blue}] (0.4,-0.4)
  edge +(3,2) ++(-0.1,0.1)
  edge +(3,2) ++(-0.1,0.1)
  edge +(3,2) ++(-0.1,0.1)
  edge +(3,2) ++(-0.1,0.1)
  edge +(3,2) ++(-0.1,0.1);
\end{tikzpicture}
\end{document}

結果如下:

透過邊緣命令堆疊矩形

答案2

您可以簡單地將所有內容打包到命令中。

\documentclass{article}

\usepackage{tikz}

\newcommand{\stack}[3][5]{  
\foreach \x in {1,...,#1}
 { \draw[fill=blue] (\x/10,-\x/10) rectangle +(#2,#3); }
}

\begin{document}
\thispagestyle{empty}
\begin{tikzpicture}
  \stack{3}{2};
  \stack[2]{-2}{3};
\end{tikzpicture}
\end{document}

樣本輸出

答案3

這是一個基於 Andrew Swann 答案的簡單解決方案:

tex 的渲染版本

\documentclass{article}
\usepackage{tikz}
% \stack{5}{(4,0)}{(3,2)}{Label} draws a stack of 5 at (4,0) with dimensions (3,2)
% and labels the center with "Label"
\newcommand{\stack}[4]{
  \foreach \i in {1,...,#1} {
    \draw[fill=blue!50] #2 ++({0.1*(#1)},{-0.1*(#1)}) ++({-0.1*\i},{0.1*\i}) rectangle +#3;
  }
  \path #2 -- +#3 node[pos=0.5] {#4};
}
\begin{document}
\begin{tikzpicture}
\stack{5}{(0,0)}{(3,2)}{I}
\stack{3}{(4,0)}{(3,2)}{II}
\stack{1}{(8,0)}{(3,2)}{III}
\end{tikzpicture}
\end{document}

相關內容