Как нарисовать кубическую цепочку?

Как нарисовать кубическую цепочку?

Я пытаюсь найти самый простой способ нарисовать 3D кубическую цепь в латексе. Помогите мневведите описание изображения здесь

Я знаю как рисовать куб в тикз. Например

\newcommand{\tikzcuboid}[4]{% width, height, depth, scale
\begin{tikzpicture}[scale=#4]
\foreach \x in {0,...,#1}
{   \draw (\x ,0  ,#3 ) -- (\x ,#2 ,#3 );

    \draw (\x ,#2 ,#3 ) -- (\x ,#2 ,0  );
    
   
}
\foreach \x in {0,...,#2}
{   \draw (#1 ,\x ,#3 ) -- (#1 ,\x ,0  );
    \draw (0  ,\x ,#3 ) -- (#1 ,\x ,#3 );
}
\foreach \x in {0,...,#3}
{   \draw (#1 ,0  ,\x ) -- (#1 ,#2 ,\x );
    \draw (0  ,#2 ,\x ) -- (#1 ,#2 ,\x );
}
\end{tikzpicture}
}

\newcommand{\tikzcube}[2]{% length, scale
\tikzcuboid{#1}{#1}{#1}{#2}
}

Я нахожу этот код вНужна помощь в создании 3D-куба из 2D-набора узлов в TikZ

введите описание изображения здесь

решение1

Вот решение tikz. Вы можете изменить \cubesAmount, чтобы нарисовать больше или меньше кубов.

введите описание изображения здесь

\documentclass{article}
\usepackage{tikz}

\begin{document}
 
\begin{tikzpicture}[z={(0.5,0.5)}]

\def\cubesAmount{3}
\foreach \i in {1,...,\cubesAmount}{
    \draw (\i-1,\i-1,\i-1) rectangle +(1,1,0) -- ++(0,1,0) -- ++(0,0,1) -- ++(1,0,0) edge +(0,0,-1) -- ++(0,-1,0) -- ++(0,0,-1);
    \ifnum\i<\cubesAmount
        \node[anchor=north west] at (\i,\i,\i) {$(\i,\i,\i)$};
    \fi
}
\node[anchor=north east] at (0,0,0){$(0,0,0)$};
\node[anchor=south west] at (\cubesAmount,\cubesAmount,\cubesAmount){$(\cubesAmount,\cubesAmount,\cubesAmount)$};
 
\end{tikzpicture}
 
\end{document}

Кроме того, если вы хотите изменить перспективу, вы можете настроить ееz={(yaw,pitch)}

введите описание изображения здесь

решение2

Обновлять:Можновключить код асимптоты в документ LaTex.Это что-то вроде этого

\documentclass{article}
\usepackage{asymptote}
\begin{document}
\begin{asy}
// can be directly run on http://asymptote.ualberta.ca/
<asymptote code>        
\end{asy}
\end{document}

Мое предложение — использовать Asymptote, тогда все доступно, встроено: unitcube— это поверхность; unitbox— это массив путей/сегментов в 3D-пространстве. Мы свободны выбирать проекцию/точку зрения, скажем, (0,-2,1)в этом случае.

введите описание изображения здесь

// http://asymptote.ualberta.ca/
import three;
size(5cm);
currentprojection=orthographic(0,-2,1,center=true,zoom=.8);
path3[] p=unitbox;
//surface p=unitcube;
draw(p,red);
draw(shift(1,1,1)*p,blue);
draw(shift(2,2,2)*p,magenta);

Сsurface p=unitcube;

введите описание изображения здесь

или этот

введите описание изображения здесь

// http://asymptote.ualberta.ca/
import three;
size(5cm);
currentprojection=orthographic(0,-2,1,center=true,zoom=.8);
path3[] p=unitbox;
surface q=unitcube;

draw(q,red+opacity(.1));
draw(shift(1,1,1)*q,blue+opacity(.1));
draw(shift(2,2,2)*q,magenta+opacity(.1));

draw(p,red);
draw(shift(1,1,1)*p,blue);
draw(shift(2,2,2)*p,magenta);

Связанный контент