Поэтому я хочу нарисовать вот такую картину.
Однако я не могу приблизиться к этому. Я пытался следовать другим постам и адаптировать их, что позволило мне правильно настроить ось, но я просто не могу получить кубы таким же образом. Кроме указания местоположения каждого куба вручную, есть ли способ сгенерировать все кубы за один раз? Мне даже не нужно столько кубов, сколько на прикрепленном изображении, я просто хочу похожее изображение.
Мне удалось сделать это с квадратами в двумерной плоскости следующим образом:
\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}