5

This question is related to my previous question How to draw a Catalan number diagram on TikZ

I would like to be able to draw generalized Catalan number diagrams using Tikz. More concretely, I would like a 3 dimensional version of the previous 2 dimensional one. Three dimensional Catalan numbers are defined as 3-dimensional lattice paths using steps (1,0,0),(0,1,0) and (0,0,1) from the origin to the point (n,n,n), the points in the path satisfy 0 ≤ x_1 ≤ x_2 ≤ x_3.

Combin
  • 335
  • 5
    Did you try just adding one more coordinate (for the z value) to all the points in the earlier solutions which only have xand y? – Peter Grill Sep 20 '12 at 21:40
  • 3
    Could you show a picture of the expected result? – Paul Gaborit Sep 20 '12 at 22:01
  • @PeterGrill There are more paths in a three-dimensional lattice than that... That way - if it works just like that, what I doubt - would only show the same paths I had but projected on the xy-plane. – Combin Sep 21 '12 at 12:10
  • @PaulGaborit I would like it to look like the "empty room" in the link below (a 3d-grid) but with a colored path moving from (0,0,0) to (n,n,n).

    (http://techpubs.sgi.com/library/dynaweb_docs/0650/SGI_EndUser/books/ShowcaseUG/sgi_html/figures/show.emptyroom.gif)

    – Combin Sep 21 '12 at 12:16

2 Answers2

7

As, for my taste, Paul Gaborit's answer is a little to unornamental, here's another one:

Code

\documentclass[parskip]{scrartcl}
\usepackage[margin=15mm]{geometry}
\usepackage{tikz}

\begin{document}

\newcommand{\xangle}{-10}
\newcommand{\yangle}{230}
\newcommand{\zangle}{270}

\newcommand{\xlength}{1}
\newcommand{\ylength}{1}
\newcommand{\zlength}{1}

\pgfmathsetmacro{\xx}{\xlength*cos(\xangle)}
\pgfmathsetmacro{\xy}{\xlength*sin(\xangle)}
\pgfmathsetmacro{\yx}{\ylength*cos(\yangle)}
\pgfmathsetmacro{\yy}{\ylength*sin(\yangle)}
\pgfmathsetmacro{\zx}{\zlength*cos(\zangle)}
\pgfmathsetmacro{\zy}{\zlength*sin(\zangle)}

\begin{tikzpicture}
[   x={(\xx cm,\xy cm)},
    y={(\yx cm,\yy cm)},
    z={(\zx cm,\zy cm)},
]
\foreach \a in {0,...,3}
{   \draw[help lines]
    (\a,0,0) -- (\a,0,3)
    (0,0,\a) -- (3,0,\a)
    node at (\a,0,-0.2) {\tiny\a}
    node at (\a,3,3.2) {\tiny\a}

    (0,\a,0) -- (0,\a,3)
    (0,0,\a) -- (0,3,\a)
    node at (0,\a,-0.2) {\tiny\a}
    node at (3,\a,3.2) {\tiny\a}

    (0,\a,3) -- (3,\a,3)
    (\a,0,3) -- (\a,3,3)
    node at (3.2,0,\a) {\tiny\a}
    node at (0,3.2,\a) {\tiny\a};
}

\node at (1.5,0,-0.5) {x};
\node at (1.5,3,3.5) {x};

\node at (0,1.5,-1) {y};
\node at (3,1.5,4) {y};

\node at (3.6,0,1.5) {z};
\node at (0,3.6,1.5) {z};


\draw[red,thin] (0,0,0) -- (0,0,3);
\draw[red,thin] (0,0,0) -- (0,3,3);
\draw[red,thin] (0,0,0) -- (3,3,3);
\draw[red,thin] (0,0,3) -- (0,3,3);
\draw[red,thin] (0,0,3) -- (3,3,3);
\draw[red,thin] (0,3,3) -- (3,3,3);

\draw[very thick,blue]
    (0,0,0)
    -- ++(0,0,1)
    -- ++(0,1,0)
    -- ++(0,0,1)
    -- ++(1,0,0)
    -- ++(0,1,0)
    -- ++(0,0,1)
    -- ++(1,0,0)
    -- ++(0,1,0)
    -- ++(1,0,0);

\draw[dashed,blue]
    (1,1,2) -- (1,1,3);

\end{tikzpicture}

\end{document}

Result

enter image description here

Tom Bombadil
  • 40,123
5

Here is an example of 3d path:

path in 3d

\documentclass{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
   \foreach \a in {0,...,3}{
     \draw[help lines]
     (\a,0,0) -- (\a,0,-3)
     (0,0,-\a) -- (3,0,-\a)
     % 
     (0,\a,0) -- (0,\a,-3)
     (0,0,-\a) -- (0,3,-\a)
     %
     (0,\a,-3) -- (3,\a,-3)
     (\a,0,-3) -- (\a,3,-3)
     ;
   }

   \draw[dashed,blue]
   (1,0,-1) -- (1,1,-1)
   (3,0,-1) -- (3,1,-1)
   (3,0,-2) -- (3,2,-2)
   ;

   \draw[line width=1pt,blue]
   (0,0,0)
   -- ++(1,0,0)
   -- ++(0,1,0)
   -- ++(0,0,-1)
   -- ++(1,0,0)
   -- ++(1,0,0)
   -- ++(0,1,0)
   -- ++(0,0,-1)
   -- ++(0,1,0)
   -- ++(0,0,-1)
   ;

\end{tikzpicture}
\end{document}
Paul Gaborit
  • 70,770
  • 10
  • 176
  • 283