In a book that I am reading about atomistic simulations, it is claimed that if we take a body-centered cubic lattice in 3D, which is defined as $$ \Lambda_1 :=A\mathbb{Z}^3, $$ where $$ A = \begin{bmatrix}1/2&1/2&1/2\\-1/2&1/2&1/2\\-1/2&-1/2&1/2\end{bmatrix} $$ and project it along $(1,1,1)$-direction, then we end with a 2D homogeneous triangular lattice, defined as $$ \Lambda_2 := B\mathbb{Z}^2, $$ where $$ B = \begin{bmatrix}1&1/2\\0&\sqrt{3}/2\end{bmatrix}. $$ I am really bad at visualising 3D things and it's been ages since I last used any first-year geometry, so I really struggle here and would appreciate any potential help. The book says that we should take $\Lambda_1$ and rotate it so that the $(1/2,1/2,1/2)$ direction becomes $(0,0,\sqrt{3}/2)$ and that lattice point $(1,1,0)$ becomes $(\sqrt{2},0,0)$. Then apparently we get $$ \sqrt{2}\Lambda_2 = \{(l_1,l_2)\,|\,l\in\Lambda_1\}. $$ I am include to say that there is a typo here, as there seems to be no rotation which accommodates both conditions (I guess?). I understand the idea, as $(1/2,1/2,1/2)$ is the closest point to the origin lying on a plane defined via normal $(1,1,1)$ (that's why we call it projection along this direction?). So that after this rotation our projection along $(1,1,1)$ will just be dropping third coordinate. Using formalue available and consulting some questions here (in particular Transform a plane to the xy plane. ) I get a rotation matrix which takes $(1/2,1/2,1/2)$ to $(0,0,\sqrt{3}/2)$. What next though? My naive idea was for any other lattice site is to get a shifted plane still with normal $(1,1,1)$, i.e. $x+y+z = D$ for different constants $D$ so that a given lattice site belongs to this plane, then translate it onto the plane $x+y+z=0$, then use the rotation matrix and then translate it back to its actual place.
I am rather lost in the procedure though and have already spent way too much time on it, so I decided to ask. Many thanks for any hints.



N=2; for ((z=-N; z<=N; z++)); do for ((y=-N; y<=N; y++)); do for ((x=-N; x<=N; x++)); do printf '%d %d %d %d %d %d\n' $[2*x] $[2*y] $[2*z] $[2*x+1] $[2*y+1] $[2*z+1] ; done ; done ; done > bcc.xyz. Each line in filebcc.xyzspecifies two lattice points. In gnuplot, runset view equal xyz ; splot "bcc.xyz" u 1:2:3 notitle w points lc 1, "bcc.xyz" u 4:5:6 notitle w points lc 3to plot them. Thex11output allows you to rotate the view using the mouse in real time. – Nominal Animal May 23 '17 at 00:42