Create a 3D patch faces matrix from vertices matrix

7 visualizaciones (últimos 30 días)
Guy Trakht
Guy Trakht el 17 de Jun. de 2020
Editada: Guy Trakht el 17 de Jun. de 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 comentarios
KSSV
KSSV el 17 de Jun. de 2020
Where are the connections?
Guy Trakht
Guy Trakht el 17 de Jun. de 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

Iniciar sesión para comentar.

Respuesta aceptada

Guy Trakht
Guy Trakht el 17 de Jun. de 2020
Editada: Guy Trakht el 17 de Jun. de 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

Más respuestas (1)

KSSV
KSSV el 17 de Jun. de 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 comentario
Guy Trakht
Guy Trakht el 17 de Jun. de 2020
no, just want to create the face matrix from the given vertices. without meshing any data.
i appreciate your help

Iniciar sesión para comentar.

Community Treasure Hunt

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

Start Hunting!

Translated by