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

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

Carlos Net

  • Junior
  • ***
  • Mensajes: 116
Dibujo de figuras en 3D con LaTeX
« en: 14/Dic./2015, 11:12:49 a. m. »
Programa en Latex para dibujar figuras en 3D:

 

Documento original: Plane partition

Documento modificado:
  Overleaf Read only
  Overleaf editable


Manual de Tikz: Minimal Tikz

Test:
Código: LaTeX
  1. % Plane partition
  2. % Author: Jang Soo Kim
  3. % Modified: Carlos at picuino.com
  4.  
  5. \documentclass{minimal}
  6. \usepackage{tikz}
  7.  
  8. % The angles of x,y,z-axes
  9. \newcommand\xaxis{210}
  10. \newcommand\yaxis{-30}
  11. \newcommand\zaxis{90}
  12.  
  13. \definecolor{graytop}{RGB}{160,160,160}
  14. \definecolor{grayleft}{RGB}{192,192,192}
  15. \definecolor{grayright}{RGB}{228,228,228}
  16.  
  17. % The top side of a cube
  18. \newcommand\topside[3]{
  19.  \fill[fill=graytop, thick, draw=white, shift={(\xaxis:#1)},shift={(\yaxis:#2)},
  20.  shift={(\zaxis:#3)}] (0,0) --(30:1) --(0,1) --(150:1) --(0,0);
  21. }
  22.  
  23. % The left side of a cube
  24. \newcommand\leftside[3]{
  25.  \fill[fill=grayleft, thick, draw=white, shift={(\xaxis:#1)},shift={(\yaxis:#2)},
  26.  shift={(\zaxis:#3)}] (0,0) --(0,-1) --(210:1) --(150:1) --(0,0);
  27. }
  28.  
  29. % The right side of a cube
  30. \newcommand\rightside[3]{
  31.  \fill[fill=grayright, thick, draw=white, shift={(\xaxis:#1)},shift={(\yaxis:#2)},
  32.  shift={(\zaxis:#3)}] (0,0) --(30:1) --(-30:1) --(0,-1) --(0,0);
  33. }
  34.  
  35. % The cube
  36. \newcommand\cube[3]{
  37.  \topside{#1}{#2}{#3} \leftside{#1}{#2}{#3} \rightside{#1}{#2}{#3}
  38. }
  39.  
  40. % Definition of \planepartition
  41. % With three counters
  42. % To draw the following plane partition, just write \planepartition{ {a, b, c}, {d,e} }.
  43. %  a b c
  44. %  d e
  45. \newcounter{x}
  46. \newcounter{y}
  47. \newcounter{z}
  48.  
  49. \newcommand\planepartition[2]{
  50. \setcounter{x}{-1}
  51.  \foreach \a in {#2} {
  52.    \addtocounter{x}{1}
  53.    \setcounter{y}{-1}
  54.    \foreach \b in \a {
  55.      \addtocounter{y}{1}
  56.      \setcounter{z}{#1}
  57.      \foreach \c in {1,...,\b} {
  58.        \addtocounter{z}{1}
  59.        \cube{\value{x}}{\value{y}}{\value{z}}
  60.      }
  61.    }
  62.  }
  63. }
  64.  
  65. \begin{document}
  66.  
  67. \begin{tikzpicture}
  68. \planepartition {0}{{3,2,2},{2,2,1},{2,1}}
  69. \planepartition {-7}{{3,3,2},{2,2,2},{2,1,1}}
  70. \end{tikzpicture}
  71.  
  72. \end{document}
  73.  
  74.  
« Última modificación: 14/Dic./2015, 23:18:34 p. m. por Carlos crawler »

Carlos Net

  • Junior
  • ***
  • Mensajes: 116
Re:Dibujo de figuras en 3D con LaTeX
« Respuesta #1 en: 14/Dic./2015, 22:26:36 p. m. »
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 read only
  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} {
     \addtocounter{z}{1}
     \setcounter{y}{0}
     \foreach \b in \a {
       \addtocounter{y}{1}
       \setcounter{x}{0}
       \foreach \c in \b {
         \addtocounter{x}{1}
         \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 p. m. por Carlos crawler »

Carlos Net

  • Junior
  • ***
  • Mensajes: 116
Re:Dibujo de figuras en 3D con LaTeX
« Respuesta #2 en: 14/Dic./2015, 23:27:12 p. m. »
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: 116
Re:Dibujo de figuras en 3D con LaTeX
« Respuesta #3 en: 14/Dic./2015, 23:33:26 p. m. »
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}}}