Überlappende Füllungen

Überlappende Füllungen

Ich möchte eine Grafik erstellen, die einen Stapel von Rechtecken darstellt. Am besten wäre ein einfacher Befehl wie \stack{5}, um einen Stapel von 5 Rechtecken zu erstellen.

Ich kann den folgenden Code verwenden:

\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);

Bildbeschreibung hier eingeben

Es scheint jedoch schwierig, daraus einen Befehl zu machen, und wenn wir den Stapel verschieben müssen, ist es mühsam, alle Koordinaten zu ändern. Ich dachte, das hier wäre vielleicht besser:

\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);

Bildbeschreibung hier eingeben

Das hat den Vorteil, dass sich durch das Verschieben nur die Koordinaten an einer offensichtlichen Stelle ändern und es ist sogar noch etwas klarer, was beabsichtigt ist.

Leider füllt diese zweite Version zuerst alle Rechtecke und zeichnet dann ihre Umrisse, sodass das „oberste“ Rechteck nicht den Rest des Stapels abdeckt.

Gibt es eine einfache Möglichkeit, überlappende Bereiche mit relativen Zeichenbefehlen zu zeichnen?

Antwort1

Hier ist eine Lösung, die die Tatsache ausnutzt, dass mit dem edgeBefehl erstellte Pfade getrennt sind und daher getrennt gezeichnet werden. Ein edgePfad ist so flexibel wie ein toPfad und kann daher angepasst werden, um praktisch alles zu zeichnen, einschließlich eines Rechtecks. Also definieren wir einen neuen to pathund einen edgeStil, der ihn aufruft.

\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}

Daraus ergibt sich folgendes:

gestapelte Rechtecke über Kantenbefehle

Antwort2

Sie können einfach alles in einem Befehl zusammenfassen.

\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}

Beispielausgabe

Antwort3

Hier ist eine einfache Lösung basierend auf der Antwort von Andrew Swann:

gerenderte Version des Textes

\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}

verwandte Informationen