
Existem maneiras de colorir uma partição plana camada por camada; por exemplo, aprendi muito comesta postagem. Gostaria de colorir uma divisória com duas cores, uma cor para uma determinada perna em um canto, outra cor para todas as outras caixas.
Abaixo está o código que estou usando. No exemplo, há uma perna amarela “longa” (o eixo x), e eu gostaria que todo o resto fosse, digamos, verde. Posso fazer com que tudo que está em cima da perna amarela fique verde, mas não o que ainda está próximo à perna, ou seja, "no chão". Tenho certeza de que este é um problema trivial, mas realmente não sei como modificar o código.
\documentclass{article}
\usepackage{xifthen}
\usepackage{verbatim}
\newcounter{x}
\newcounter{y}
\newcounter{z}
% The angles of x,y,z-axes
\newcommand\xaxis{210}
\newcommand\yaxis{-30}
\newcommand\zaxis{90}
% The top side of a cube
\newcommand\topside[3]{
\fill[fill=cubecolor, draw=black,shift={(\xaxis:#1)},shift={(\yaxis:#2)},
shift={(\zaxis:#3)}] (0,0) -- (30:1) -- (0,1) --(150:1)--(0,0);
}
% The left side of a cube
\newcommand\leftside[3]{
\fill[fill=cubecolor, draw=black,shift={(\xaxis:#1)},shift={(\yaxis:#2)},
shift={(\zaxis:#3)}] (0,0) -- (0,-1) -- (210:1) --(150:1)--(0,0);
}
% The right side of a cube
\newcommand\rightside[3]{
\fill[fill=cubecolor, draw=black,shift={(\xaxis:#1)},shift={(\yaxis:#2)},
shift={(\zaxis:#3)}] (0,0) -- (30:1) -- (-30:1) --(0,-1)--(0,0);
}
% The cube
\newcommand\cube[3]{
\topside{#1}{#2}{#3} \leftside{#1}{#2}{#3} \rightside{#1}{#2}{#3}
}
\newcommand*\cubecolors[1]{%
\ifcase#1\relax
\or\colorlet{cubecolor}{yellow}%
\or\colorlet{cubecolor}{green}%
\or\colorlet{cubecolor}{green}%
\or\colorlet{cubecolor}{green}%
\or\colorlet{cubecolor}{green}%
\or\colorlet{cubecolor}{green}%
\or\colorlet{cubecolor}{green}%
\or\colorlet{cubecolor}{green}%
\else
\colorlet{cubecolor}{blue}%
\fi
}
% Definition of \planepartition
% To draw the following plane partition, just write \planepartition{ {a, b, c}, {d,e} }.
% a b c
% d e
\newcommand\planepartition[1]{
\setcounter{x}{-1}
\foreach \a in {#1} {
\addtocounter{x}{1}
\setcounter{y}{-1}
\foreach \b in \a {
\addtocounter{y}{1}
\setcounter{z}{-1}
\foreach \c in {1,...,\b} {
\addtocounter{z}{1}
\cubecolors{\c}
\cube{\value{x}}{\value{y}}{\value{z}}
}
}
}
}
\usepackage{tikz}
\begin{document}
\begin{figure}[h]
\centering
\begin{tikzpicture}[scale=0.26]
\planepartition{{5,4,2,1},{3,2,1},{1,1},{1,1},{1},{1},{1},{1},{1},{1}}
\end{tikzpicture}
\end{figure}
\end{document}
Responder1
Deixe-me começar admitindo que nem tentei entender a lógica do seu código. No entanto, apenas introduzindo um switch
\pgfmathtruncatemacro{\myc}{ifthenelse(\value{y}+\value{z}==0,1,2)}
\cubecolors{\myc}
que testa apenas se y
e z
são zero (você não usa números negativos), recebo
Se você também tiver coordenadas negativas, use
\pgfmathtruncatemacro{\myc}{ifthenelse(abs(\value{y})+abs(\value{z})==0,1,2)}
em vez de.
Código completo:
\documentclass{article}
\usepackage{xifthen}
\usepackage{verbatim}
\newcounter{x}
\newcounter{y}
\newcounter{z}
% The angles of x,y,z-axes
\newcommand\xaxis{210}
\newcommand\yaxis{-30}
\newcommand\zaxis{90}
% The top side of a cube
\newcommand\topside[3]{
\fill[fill=cubecolor, draw=black,shift={(\xaxis:#1)},shift={(\yaxis:#2)},
shift={(\zaxis:#3)}] (0,0) -- (30:1) -- (0,1) --(150:1)--(0,0);
}
% The left side of a cube
\newcommand\leftside[3]{
\fill[fill=cubecolor, draw=black,shift={(\xaxis:#1)},shift={(\yaxis:#2)},
shift={(\zaxis:#3)}] (0,0) -- (0,-1) -- (210:1) --(150:1)--(0,0);
}
% The right side of a cube
\newcommand\rightside[3]{
\fill[fill=cubecolor, draw=black,shift={(\xaxis:#1)},shift={(\yaxis:#2)},
shift={(\zaxis:#3)}] (0,0) -- (30:1) -- (-30:1) --(0,-1)--(0,0);
}
% The cube
\newcommand\cube[3]{
\topside{#1}{#2}{#3} \leftside{#1}{#2}{#3} \rightside{#1}{#2}{#3}
}
\newcommand*\cubecolors[1]{%
\ifcase#1\relax
\or\colorlet{cubecolor}{yellow}%
\or\colorlet{cubecolor}{green}%
\or\colorlet{cubecolor}{green}%
\or\colorlet{cubecolor}{green}%
\or\colorlet{cubecolor}{green}%
\or\colorlet{cubecolor}{green}%
\or\colorlet{cubecolor}{green}%
\or\colorlet{cubecolor}{green}%
\else
\colorlet{cubecolor}{blue}%
\fi
}
% Definition of \planepartition
% To draw the following plane partition, just write \planepartition{ {a, b, c}, {d,e} }.
% a b c
% d e
\newcommand\planepartition[1]{
\setcounter{x}{-1}
\foreach \a in {#1} {
\addtocounter{x}{1}
\setcounter{y}{-1}
\foreach \b in \a {
\addtocounter{y}{1}
\setcounter{z}{-1}
\foreach \c in {1,...,\b} {
\addtocounter{z}{1}
\pgfmathtruncatemacro{\myc}{ifthenelse(\value{y}+\value{z}==0,1,2)}
\cubecolors{\myc}
\cube{\value{x}}{\value{y}}{\value{z}}
}
}
}
}
\usepackage{tikz}
\begin{document}
\begin{figure}[h]
\centering
\begin{tikzpicture}[scale=0.26]
\planepartition{{5,4,2,1},{3,2,1},{1,1},{1,1},{1},{1},{1},{1},{1},{1}}
\end{tikzpicture}
\end{figure}
\end{document}