Create a 3D patch faces matrix from vertices matrix

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 Kommentare

KSSV
KSSV am 17 Jun. 2020
Attach/ copy the data .... image snippet will not help us to help you.
pentagon_3d_vertices = [-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
KSSV
KSSV am 17 Jun. 2020
Where are the connections?
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

Melden Sie sich an, um zu kommentieren.

 Akzeptierte Antwort

Guy Trakht
Guy Trakht am 17 Jun. 2020
Bearbeitet: Guy Trakht am 17 Jun. 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

Weitere Antworten (1)

KSSV
KSSV am 17 Jun. 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 Kommentar

no, just want to create the face matrix from the given vertices. without meshing any data.
i appreciate your help

Melden Sie sich an, um zu kommentieren.

Community Treasure Hunt

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

Start Hunting!

Translated by