### Autor Tema: Dibujo de figuras en 3D con LaTeX  (Leído 5122 veces)

0 Usuarios y 1 Visitante están viendo este tema.

#### Carlos Net

• Junior
• Mensajes: 89
##### Dibujo de figuras en 3D con LaTeX
« en: 14/Dic/2015, 11:12:49 am »
Programa en Latex para dibujar figuras en 3D:

Documento original: Plane partition

Overleaf editable

Manual de Tikz: Minimal Tikz

Test:
Código: (latex) [Seleccionar]
% Plane partition
% Author: Jang Soo Kim
% Modified: Carlos at picuino.com

\documentclass{minimal}
\usepackage{tikz}

% The angles of x,y,z-axes
\newcommand\xaxis{210}
\newcommand\yaxis{-30}
\newcommand\zaxis{90}

\definecolor{graytop}{RGB}{160,160,160}
\definecolor{grayleft}{RGB}{192,192,192}
\definecolor{grayright}{RGB}{228,228,228}

% The top side of a cube
\newcommand\topside[3]{
\fill[fill=graytop, thick, draw=white, 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=grayleft, thick, draw=white, 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=grayright, thick, draw=white, 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}
}

% Definition of \planepartition
% With three counters
% To draw the following plane partition, just write \planepartition{ {a, b, c}, {d,e} }.
%  a b c
%  d e
\newcounter{x}
\newcounter{y}
\newcounter{z}

\newcommand\planepartition[2]{
\setcounter{x}{-1}
\foreach \a in {#2} {
\setcounter{y}{-1}
\foreach \b in \a {
\setcounter{z}{#1}
\foreach \c in {1,...,\b} {
\cube{\value{x}}{\value{y}}{\value{z}}
}
}
}
}

\begin{document}

\begin{tikzpicture}
\planepartition {0}{{3,2,2},{2,2,1},{2,1}}
\planepartition {-7}{{3,3,2},{2,2,2},{2,1,1}}
\end{tikzpicture}

\end{document}

« Última modificación: 14/Dic/2015, 23:18:34 pm por Carlos crawler »

#### Carlos Net

• Junior
• Mensajes: 89
##### Re:Dibujo de figuras en 3D con LaTeX
« Respuesta #1 en: 14/Dic/2015, 22:26:36 pm »
Esta macro permite definir dónde va cada uno de los cubos de la pieza.
En el listado final se debe escribir un 0 o un 1. En caso de escribir 1, se dibuja un cubo.
El orden va de izquierda a derecha, de detras a adelante y de abajo hacia arriba.

Ejemplo: Una banqueta
Overleaf Edit

Código: [Seleccionar]
% Plane partition
% Author: Jang Soo Kim
% Modified: Carlos at picuino.com

\documentclass{minimal}
\usepackage{tikz}
%%%<
\usepackage{verbatim}
\usepackage[active,tightpage]{preview}
\PreviewEnvironment{tikzpicture}
\setlength\PreviewBorder{30pt}%
%%%>

% The angles of x,y,z-axes
\newcommand\xaxis{210}
\newcommand\yaxis{-30}
\newcommand\zaxis{90}

\definecolor{graytop}{RGB}{160,160,160}
\definecolor{grayleft}{RGB}{192,192,192}
\definecolor{grayright}{RGB}{228,228,228}

% The top side of a cube
\newcommand\topside[3]{
\fill[fill=graytop, thick, draw=white, 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=grayleft, thick, draw=white, 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=grayright, thick, draw=white, 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}
}

% Definition of \planepartition
% With three counters
% To draw the following plane partition, just write \planepartition{ {a, b, c}, {d,e} }.
%  a b c
%  d e
\newcounter{x}
\newcounter{y}
\newcounter{z}

\newcommand\planepartition[1]{
\setcounter{z}{0}
\foreach \a in {#1} {
\setcounter{y}{0}
\foreach \b in \a {
\setcounter{x}{0}
\foreach \c in \b {
\ifnum \c > 0
\cube{\value{x}}{\value{y}}{\value{z}}
\fi
}
}
}
}

\begin{document}

\begin{tikzpicture}
\planepartition {
{{1,0,1},{0,0,0},{1,0,1}},
{{1,0,1},{0,0,0},{1,0,1}},
{{1,1,1},{1,1,1},{1,1,1}}}

\end{tikzpicture}

\end{document}
« Última modificación: 14/Dic/2015, 23:29:01 pm por Carlos crawler »

#### Carlos Net

• Junior
• Mensajes: 89
##### Re:Dibujo de figuras en 3D con LaTeX
« Respuesta #2 en: 14/Dic/2015, 23:27:12 pm »
Una escalera:
Código: [Seleccionar]
\planepartition {
{{1,1,1},{1,1,1},{1,1,1}},
{{1,1,0},{1,1,0},{1,1,0}},
{{1,0,0},{1,0,0},{1,0,0}}}

#### Carlos Net

• Junior
• Mensajes: 89
##### Re:Dibujo de figuras en 3D con LaTeX
« Respuesta #3 en: 14/Dic/2015, 23:33:26 pm »
Una escalera doble:

Código: [Seleccionar]
\planepartition {
{{1,1,1},{1,1,1},{1,1,1}},
{{1,1,0},{1,1,0},{0,0,0}},
{{1,0,0},{0,0,0},{0,0,0}}}