Как рисовать кубы на трехмерной плоскости

Как рисовать кубы на трехмерной плоскости

Поэтому я хочу нарисовать вот такую ​​картину. введите описание изображения здесь

Однако я не могу приблизиться к этому. Я пытался следовать другим постам и адаптировать их, что позволило мне правильно настроить ось, но я просто не могу получить кубы таким же образом. Кроме указания местоположения каждого куба вручную, есть ли способ сгенерировать все кубы за один раз? Мне даже не нужно столько кубов, сколько на прикрепленном изображении, я просто хочу похожее изображение.

Мне удалось сделать это с квадратами в двумерной плоскости следующим образом:

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{shapes.geometric}

\begin{document}
 \begin{tikzpicture}[square/.style={regular polygon,regular polygon sides=4}]

% Coordinate axes
\begin{scope}[
  semithick,
  ->,
]
  \draw (0, 0) -- (0, 9.5);
  \draw (0, 0) -- (9.5, 0);

\end{scope}

\draw[node font=\small]
  \foreach \y in {0, ..., 9} {
    (0, \y) +(.25em, 0) -- ++(-.25em, 0)
    node[left] {$\y$}
  }      
\foreach \x in {1, ..., 9} {
    (\x,0)  +(0, .25em) -- ++(0, -.25em)
    node[below] {$\x$}    
} ;


\foreach \x in {0, ..., 9} {
 \foreach \y in {0, ..., 9} { 
\node[draw,square,inner sep=5pt,fill] at (\x+.5,\y+.5) {};                    
                } 
                }    
  \end{tikzpicture}
\end{document}

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

Мне бы хотелось сделать что-то подобное, если это возможно.

решение1

Отредактируйте с более близким к запросу выводом, но все еще нужны углы корректировки (я не буду этого делать)

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{3d,calc}

\begin{document}

\xdef\dist{0.25}
\xdef\hdist{0.1}
\xdef\ext{0.5}
\xdef\out{9.2}
 \begin{tikzpicture}[x={(-0.2cm,-0.4cm)}, y={(1cm,0cm)}, z={(0cm,1cm)},
     scale=0.8]


% Coordinate axes
\begin{scope}[canvas is xy plane at z=30,rotate around z=30, fill opacity=0.7]
  %\draw[->,thick] (0, 0,0) -- (0, 12.7,0)node[below]{\Large $\mathbf{y}$};
  %\draw[->,thick] (0, 0,0) -- (11.5, 0,0) node[left]{\Large $\mathbf{x}$};
  %\draw[->,thick] (0,0,0) -- (0,0,10.5)node[left]{\Large $\mathbf{z}$};

  \foreach \x in {0,1,...,9}{
  \foreach \y in {0,1, ..., 9} {
\foreach \z in {0,1,...,9}{
   \fill[draw=black,blue!75] (\x,\y,{\z+\dist}) --({\x+\dist},\y,{\z+\dist}) --({\x+\dist},{\y+\dist},{\z+\dist})--(\x,{\y+\dist},{\z+\dist})--cycle; 
   \fill[draw=black,brown!40!blue] (\x,\y,\z) --(\x,\y,{\z+\dist}) --({\x+\dist},\y,{\z+\dist})--({\x+\dist},\y,\z)--cycle; 
   \fill[draw=black,red!45] ({\x+\dist},\y,\z) --({\x+\dist},{\y+\dist},\z) --({\x+\dist},{\y+\dist},{\z+\dist})--({\x+\dist},\y,{\z+\dist})--cycle; 
 }}}



  \draw[thick]({0-\ext},{0-\ext},{0-\ext})--({0-\ext},{\out+\ext},{0-\ext})--({\out+\ext},{\out+\ext},{0-\ext})--({\out+\ext},{0-\ext},{0-\ext})--cycle;
  \draw[thick]({0-\ext},{0-\ext},{0-\ext})--({0-\ext},{0-\ext},{\out+\ext})--({\out+\ext},{0-\ext},{\out+\ext})--({\out+\ext},{0-\ext},{0-\ext})--cycle;
   \draw[thick]({0-\ext},{\out+\ext},{0-\ext})--({0-\ext},{\out+\ext},{\out+\ext})--({\out+\ext},{\out+\ext},{\out+\ext})--({\out+\ext},{\out+\ext},{0-\ext})--cycle;
   \draw[thick]({0-\ext},{0-\ext},{\out+\ext})--({0-\ext},{\out+\ext},{\out+\ext})--({\out+\ext},{\out+\ext},{\out+\ext})--({\out+\ext},{0-\ext},{\out+\ext})--cycle;
%\foreach \i in {1,...,9}
%{
% \draw[-,thin] (\i,\hdist,0)--(\i,-\hdist,0) node[left] {\i};
% \draw[-,thin] (0,\hdist,\i)--(0,-\hdist,\i) node[left] {\i};
%}



\end{scope}

  \end{tikzpicture}
\end{document}

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

Старый ответ, который просто показывает необходимый базовый код:

Вот способ:

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{3d,calc}

\begin{document}

\xdef\dist{0.2}
\xdef\hdist{0.1}
 \begin{tikzpicture}[x={(-0.2cm,-0.4cm)}, y={(1cm,0cm)}, z={(0cm,1cm)}, 
     scale=0.8,
     fill opacity=0.4,
     color={gray},bottom color=white,top color=black]

 \tikzset{xyplane/.style={canvas is xy plane at z=#1}}

% Coordinate axes
\begin{scope}[xyplane=0,rotate around z=28]
  \draw[->,thick] (0, 0,0) -- (0, 12.7,0)node[below]{\Large $\mathbf{y}$};
  \draw[->,thick] (0, 0,0) -- (11.5, 0,0) node[left]{\Large $\mathbf{x}$};
  \draw[->,thick] (0,0,0) -- (0,0,10.5)node[left]{\Large $\mathbf{z}$};
\foreach \i in {1,...,9}
{
 \draw[-,thin] (\i,\hdist,0)--(\i,-\hdist,0) node[left] {\i};
 \draw[-,thin] (0,\hdist,\i)--(0,-\hdist,\i) node[left] {\i};
}

\foreach \x in {0,1,...,9}{
  \foreach \y in {0,1, ..., 9} {
\foreach \z in {0,...,9}{
   \fill[draw=black,blue!75] (\x,\y,{\z+\dist}) --({\x+\dist},\y,{\z+\dist}) --({\x+\dist},{\y+\dist},{\z+\dist})--(\x,{\y+\dist},{\z+\dist})--cycle; 
   \fill[draw=black,brown!80] (\x,\y,\z) --(\x,\y,{\z+\dist}) --({\x+\dist},\y,{\z+\dist})--({\x+\dist},\y,\z)--cycle; 
   \fill[draw=black,red!45] ({\x+\dist},\y,\z) --({\x+\dist},{\y+\dist},\z) --({\x+\dist},{\y+\dist},{\z+\dist})--({\x+\dist},\y,{\z+\dist})--cycle; 
 }}}

\end{scope}

  \end{tikzpicture}
\end{document}

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

решение2

Просто ради развлечения!

\documentclass{standalone}
\usepackage{tikz,tikz-3dplot}
\usepackage{amsmath}
\def\l{0.15}
\tikzset{
  cube/.pic={
    \draw[] (0,0,0) -- (0,\l,0) -- (\l,\l,0) -- (\l,0,0) -- cycle;
    %draw the back-right of the cube
    \draw[] (0,0,0) -- (0,\l,0) -- (0,\l,\l) -- (0,0,\l) -- cycle;
    %draw the back-left of the cube
    \draw[] (0,0,0) -- (\l,0,0) -- (\l,0,\l) -- (0,0,\l) -- cycle;
    %draw the front-right of the cube
    \draw[fill=red] (\l,0,0) -- (\l,\l,0) -- (\l,\l,\l) -- (\l,0,\l)-- cycle;
    %draw the front-left of the cube
    \draw[fill=orange] (0,\l,0) -- (\l,\l,0) -- (\l,\l,\l) -- (0,\l,\l) -- cycle;
    %draw the top of the cube
    \draw[fill=blue] (0,0,\l) -- (0,\l,\l) -- (\l,\l,\l) -- (\l,0,\l) -- cycle;        
            }
        }


\begin{document}
   \tdplotsetmaincoords{60}{135}
\begin{tikzpicture}
    [tdplot_main_coords,scale=1,
        axis/.style={-latex,thick},
        cube/.style={thin,opacity=.5}]

    %draw the axes
    \draw[axis] (0,0,0) -- (6,0,0) node[above]{$x$};
    \draw[axis] (0,0,0) -- (0,6,0) node[anchor=west]{$y$};
    \draw[axis] (0,0,0) -- (0,0,6) node[anchor=west]{$z$};

    \foreach \x in {0,0.5,...,5}{
    \foreach \y in {0,0.5,...,5}{
    \foreach \z in {0,0.5,...,5}{
    \pic at (\x,\y,\z) {cube};
   }}}


    \end{tikzpicture}
\end{document}

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

решение3

Хочу отметить, что в pgfplots есть встроенные кубы, и вам, возможно, захочется взглянуть на них.этот отличный ответесли вам нужен перспективный вид.

\documentclass[tikz,border=3.14mm]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.16}
\begin{document}
\begin{tikzpicture}
\edef\Coords{}
\pgfmathtruncatemacro{\Nmax}{10}
\foreach \X in {1,...,\Nmax}
 {\foreach \Y in {1,...,\Nmax}
  {\foreach \Z in {1,...,\Nmax}
   {\xdef\Coords{\Coords (\X,\Y,\Z)}}
  }
 }
 \begin{axis}[
        view={120}{40},
        width=220pt,
        height=220pt,
       % z buffer=sort,
        xmin=-1,xmax=\Nmax+1,
        ymin=-1,ymax=\Nmax+1,
        zmin=-1,zmax=\Nmax+1,
        enlargelimits=upper,
        xtick=\empty,ytick=\empty,ztick=\empty,
        ]
   \addplot3 [only marks,scatter,mark=cube*,mark size=4]
            coordinates {\Coords};
 \end{axis}
\end{tikzpicture}
\end{document}

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

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