Подача всего объема кубика маленькими кубиками в MATLAB

Я построил полый куб в MATLAB, я хочу полностью заполнить его маленькими кубиками. Затем я хочу найти способ получить доступ к этим кубам и проложить через них пути, т. Е. Если к кубу x в данный момент обращаются, должен быть способ узнать, каковы его правые, левые, верхние, нижние, передние и задние ближайшие соседи ( ближайшие соседи = кубы непосредственно рядом с текущим кубом). Я думаю, что у нас есть 6 соседей, потому что у нас есть 6 различных граней куба.

Зная ближайший куб в каждом направлении, путь через кубы можно определить как последовательность шагов (например, справа, слева, слева, сверху, справа, спереди). Я думаю, чтобы иметь возможность получить доступ к каждому маленькому кубу и перейти к ближайшим, нам нужно представить маленькие кубы в матрице (возможно, 3D), где, если маленький кубик имеет соседний куб x справа, то в матрице x появится в столбце рядом с текущим столбцом маленького куба. Также, если есть прямой сосед в другом глубинном слое (те же координаты x, y, но разные координаты z, например, передние и задние соседи), это должно быть указано. Есть ли более простой способ определить соседей?

Я получил код отrayryeng (Сборка полого куба и подача его маленькими кубиками в MATLAB) случайным образом заполнить множество маленьких кубиков внутри большого и построить трехмерную матрицу, где каждый срез матрицы (глубина) представляет один из маленьких кубиков, а строки и столбцы каждого среза (8 строк и 3 столбца) представляют xyz координаты вершин каждого маленького кубика. Пожалуйста, посмотрите на ссылку на вопрос, которую я предоставил, чтобы увидеть код.

Я хочу сделать две модификации в коде,

1. Заполните большой кубик маленькими кубиками организованным образом, а не случайным образом.

2- отрегулируйте трехмерную матрицу, чтобы представить, как маленькие кубики соседствуют друг с другом.

Я попытался настроить код в связанном вопросе, чтобы заполнить куб организованным способом. Это мое испытание (я добавил if if в цикл for),

   clf;
figure(1);
format compact 
h(1) = axes('Position',[0.2 0.2 0.6 0.6]);

%These are the different 8 vertices of the cube, each is defined by its 3 x
%y z coordinates:
vert = [1 1 -1; 
        -1 1 -1; 
        -1 1 1; 
        1 1 1; 
        -1 -1 1;
        1 -1 1; 
        1 -1 -1;
        -1 -1 -1];
%These are the 6 faces of the cube, each is defined by connecting 4 of the
%available vertices:
fac = [1 2 3 4; 
       4 3 5 6; 
       6 7 8 5; 
       1 2 8 7; 
       6 7 1 4; 
       2 3 5 8];

% I defined a new cube whose length is 1 and centers at the origin.
vert2 = vert * .05;  
fac2 = fac;


patch('Faces',fac,'Vertices',vert,'Facecolor', 'w');  % patch function for the first big cube. 
axis([-1, 1, -1, 1, -1, 1]);
axis equal;

hold on;

patch('Faces', fac2, 'Vertices', vert2, 'FaceColor', 'r', 'EdgeColor', 'none');
material metal;
alpha('color');
alphamap('rampdown');
%view(3);


hold on;
rng(123); %// Set seed for reproducibility
num_squares = 1000; %// Set total number of squares

%// New - to store the coordinates
coords = [];

%// For remembering the colours
colors = [];
%// For each square...

for idx = 1 : num_squares


    %// Take the base cube and add an offset to each coordinate
    %// Each coordinate will range from [-1,1]
    if (idx==1)
    vert_new = bsxfun(@plus, vert2, [.01 .01 .01]);

    else 
    vert_new = bsxfun (@plus, vert_new,[.01 .01 .01] );
    end
    %// New - For the coordinates matrix
    coords = cat(3, coords, vert_new);

    %// Generate a random colour for each cube
    color = rand(1,3);

    %// New - Save the colour
    colors = cat(1, colors, color);

    %// Draw the cube
    patch('Faces', fac, 'Vertices', vert_new, 'FaceColor', color,'EdgeColor', 'none');
end




%// Post processing
material metal;
alpha('color');
alphamap('rampdown');
view(3);

Но я получаю результат, подобный показанному на следующей картинке,

Может кто-нибудь сказать мне, как решить эту проблему и построить 3D-матрицу (или любой другой более простой способ представить соседей каждого куба)?

РЕДАКТИРОВАТЬ: подробнее о проблеме соседа малого куба. Подумайте о наличии куба C где-нибудь внутри большого куба. Пусть позиция куба будет (.5, .5, .5), которую мы можем рассматривать как центр куба. Тогда у этого куба будет 6 соседних кубов (расположенных непосредственно рядом с ним) с 2 соседями на ось. Итак, для куба (.5, .5, .5) имеем

сосед оси x справа от C (.5 + смещение, .5, .5)

сосед оси x слева от C (.5-смещение, .5, .5)

сосед оси Y к вершине C (.5, .5 + смещение, .5)

сосед оси Y к основанию C (.5, .5-смещение, .5)

Ось z соседствует на одну глубину после C (.5, .5, .5 + смещение)

Ось z соседствует на одну глубину до C (.5, .5, .5-смещение)

где смещение можно рассматривать как расстояние между центром куба и любой из его граней. Это просто объяснение, чтобы прояснить идею, это не должно быть реализовано таким же образом. Я надеюсь, что это понятно, я был бы признателен за любую помощь в построении этой матрицы соседства.

Благодарю.

Ответы на вопрос(1)

Ваш ответ на вопрос