Create a 3D patch faces matrix from vertices matrix

6 Ansichten (letzte 30 Tage)
Guy Trakht
Guy Trakht am 17 Jun. 2020
Bearbeitet: Guy Trakht am 17 Jun. 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 Kommentare
KSSV
KSSV am 17 Jun. 2020
Where are the connections?
Guy Trakht
Guy Trakht am 17 Jun. 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

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