Create a 3D patch faces matrix from vertices matrix

7 vues (au cours des 30 derniers jours)
Guy Trakht
Guy Trakht le 17 Juin 2020
Modifié(e) : Guy Trakht le 17 Juin 2020
Hello,
im trying to convert 2D patches to 3D patches (extrude the 2D poligon) . for that purpose i already have a vertices matrix but im trying to build the faces matrix as said in the MATLAB documentation, but i cant follow the logic for 'n' lines polygon, (for example a star shape) . im looking for a function that gets the left matrix and returnes the right matrix. many thanks to the helpers
  4 commentaires
KSSV
KSSV le 17 Juin 2020
Where are the connections?
Guy Trakht
Guy Trakht le 17 Juin 2020
sorry for the missing data.. the 6'th point is above the 1'st , 7th' is above 2nd' and so on.. two identicle polygons - one on top the other. i hope this is more clear now

Connectez-vous pour commenter.

Réponse acceptée

Guy Trakht
Guy Trakht le 17 Juin 2020
Modifié(e) : Guy Trakht le 17 Juin 2020
function [faces_matrix] = vertices2faces (vertices_matrix)
%this function recives vertices matrix for an 'n' lines polygon and
%returnes the faces matrix - only works with extruded straight up polygons
wall_faces = zeros(length(vertices_matrix)/2,4);
for i=1:(length(vertices_matrix)/2-1)
wall_faces(i,:) = [i, i+1, i+1+length(vertices_matrix)/2, i+length(vertices_matrix)/2];
end
wall_faces (i+1,:) = [length(vertices_matrix)/2, 1, length(vertices_matrix)/2+1, length(vertices_matrix)];
top_and_bottom_faces = [1:length(vertices_matrix)/2;length(vertices_matrix)/2+1:length(vertices_matrix)];
%in a case that the tom and bottom faces are with less vertices then the walls
if length(vertices_matrix)/2<4
faces_matrix =[wall_faces; top_and_bottom_faces, top_and_bottom_faces(:,1)];
else
for j=5:length(vertices_matrix)/2
wall_faces(:,j) = wall_faces(:,1);
end
faces_matrix = [wall_faces; top_and_bottom_faces];
end
end

Plus de réponses (1)

KSSV
KSSV le 17 Juin 2020
Are you looking for something like this?
data = [-0.293 -0.404 0;
-0.475 0.154 0;
0 0.5 0;
0.475 0.154 0;
0.293 -0.404 0;
-0.293 -0.404 1;
-0.475 0.154 1;
0 0.5 1;
0.475 0.154 1;
0.293 -0.404 1]
%% the first 5 rows are the bottom vertices , the last 5 are the upper
x = data(:,1) ; y = data(:,2) ; z = data(:,3) ;
yi = linspace(min(y),max(y),10) ;
zi = linspace(min(z),max(z),10) ;
[Y,Z] = meshgrid(yi,zi);
X = griddata(y,z,x,Y,Z) ;
surf(X,Y,Z)
  1 commentaire
Guy Trakht
Guy Trakht le 17 Juin 2020
no, just want to create the face matrix from the given vertices. without meshing any data.
i appreciate your help

Connectez-vous pour commenter.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by