Генерация кубической сетки

Я пытаюсь сгенерировать кубическую сетку в Matlab, чтобы я мог создать сетку из M x N x Q кубов, где M, N и Q - целые числа. Мне не нужно строить его, а нужно создать B-Rep сетки (матрица вершин и граней граней - без дублированных внутренних граней). Я попробовал два подхода:

  1. Скопируйте и переведите точки в направлении X, Y, Z, удалите дубликаты точек и попытайтесь создать новую топологию (я понятия не имею, как).
  2. Используйте набор инструментов Matlab Neuronal Neural Network, в частности, функцию gridplot, которая создает трехмерную сетку точек, но матрица граней не может быть сгенерирована из этой функции.

Какие-либо предложения?

Спасибо.

Обновление Матрица вершин содержит все 8 точек каждого куба, а матрица граней - все 6 граней каждого куба. Я могу сгенерировать это с помощью следующего кода: clc clear

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];      
vert_total = [];
face_total = fac;

for x = 0 : 1
for y = 0 : 1
for z = 0 : 1
  vert = [1 1 0; 
         0 1 0; 
         0 1 1; 
         1 1 1; 
         0 0 1;
         1 0 1; 
         1 0 0;
         0 0 0];
 vert(:,1) = vert(:,1) + x;
 vert(:,2) = vert(:,2) + y;
 vert(:,3) = vert(:,3) + z;
 vert_total = [vert_total; vert];

 face = face_total(end-5:end,:);
 face_total = [face_total; face+8];

end
end
end

Проблема с этим кодом состоит в том, что он содержит повторяющиеся вершины и повторяющиеся грани. Устранить повторяющуюся вершину довольно просто, используя уникальную функцию, но я не знаю, как обращаться с топологией (матрицей граней), когда удаляю повторяющиеся точки (очевидно, некоторые грани также должны быть удалены).

Любые предложения с этим?

1 ответ

Решение

Вы можете создать трехмерную сетку, а затем сохранить только те, на 6 граней. Кто-то другой может указать лучший путь, чем этот.

M = 5; N = 6; Q = 7;
[X, Y, Z] = ndgrid(1:M, 1:N, 1:Q); % 3D
faces = X==1 | X==M | Y==1 | Y==N | Z==1 | Z==Q;
X = X(faces);
Y = Y(faces);
Z = Z(faces);

Теперь [X Y Z] - это координаты для граней.

Другие вопросы по тегам