Генерация кубической сетки
Я пытаюсь сгенерировать кубическую сетку в Matlab, чтобы я мог создать сетку из M x N x Q кубов, где M, N и Q - целые числа. Мне не нужно строить его, а нужно создать B-Rep сетки (матрица вершин и граней граней - без дублированных внутренних граней). Я попробовал два подхода:
- Скопируйте и переведите точки в направлении X, Y, Z, удалите дубликаты точек и попытайтесь создать новую топологию (я понятия не имею, как).
- Используйте набор инструментов 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] - это координаты для граней.