2017-08-12 6 views
1

J'essaie de générer une grille cubique dans Matlab pour que je puisse produire une grille de M x N x Q cubes avec M, N et Q étant des nombres entiers. Je n'ai pas besoin de le tracer, mais plutôt de produire un B-Rep de la grille (matrice des sommets et matrices de visages - sans doublons internes). J'ai essayé deux approches:Génération de la grille cubique

  1. Copiez et traduisez des points dans la direction X, Y, Z, éliminez les points en double et essayez de générer la nouvelle topologie (je ne sais pas comment).
  2. Utilisez la boîte à outils Matlab Neuronal Neural Network, en particulier la fonction gridplot qui produit une grille de points 3D, mais la matrice de faces ne peut pas être générée à partir de cette fonction.

Des suggestions?

Merci.

Mise à jour La matrice vertex contient les 8 points de chaque cube et la matrice des faces toutes les 6 faces de chaque cube. Je peux générer ce avec le code suivant: clc clair

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 

Le problème avec ce code est qu'il contient en double et en double sommet faces. L'élimination du sommet répété est assez simple en utilisant la fonction unique, mais je ne sais pas comment gérer la topologie (matrice des visages) quand j'élimine les points répétés (évidemment, certains des visages doivent également être éliminés).

Des sugestions avec ça?

+0

Si vous cherchez à générer des correctifs pour la * surface * d'une région voxelée en 3D (sans faces internes), alors [this] (https://stackoverflow.com/q/43948680/52738) peut être de un certain intérêt pour vous. – gnovice

Répondre

0

Vous pouvez créer la grille 3D, puis ne conserver que celles à 6 faces. Quelqu'un d'autre peut indiquer un meilleur moyen que cela.

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); 

maintenant [X Y Z] sont coordonnées de faces.

+0

Bonjour, je ne pense pas que je me suis expliqué sur le problème. La matrice de faces doit contenir une topologie complète pour chaque face de chaque cube. J'ai mis à jour la réponse pour plus de clarté et pour montrer ce que j'ai fait. –