How to combine multiple surfaces and extract data points (faces and vertices ) as one surface?

14 vues (au cours des 30 derniers jours)
I have 5 surfaces in one file as a (5x1 struct with 2 fields) format, as attached. each one is made of Points(vertices) and ConnectivityList (faces). I was able to trisurf them using for loop as shown in my code. What I want is to combine them as one surface(1x1 struct with 2 fields) which has only one field of Points and only one field of ConnectivityList. so I can trisurf it and deal with it as on surface without for loop.
Thank you so much
SurfaceN.vertices=[];
SurfaceN.faces=[];
for N=1:length(Surfaces);
SurfaceN.vertices=Surfaces(N).Points;
SurfaceN.faces=Surfaces(N).ConnectivityList;
S=SurfaceN;trisurf(S.faces, S.vertices(:,1),S.vertices(:,2),S.vertices(:,3),'FaceAlpha', 0.5, 'FaceColor', 'r');
hold on
end
The 5 surfaces:
The 5 surfaces using trisurf with for loop

Réponse acceptée

KSSV
KSSV le 27 Oct 2017
Modifié(e) : KSSV le 2 Nov 2017
load surfaces.mat ;
coor = cell(5,1) ;
for N=1:length(Surfaces)
S.vertices=Surfaces(N).Points;
S.faces=Surfaces(N).ConnectivityList;
coor{N} = S.vertices ;
trisurf(S.faces, S.vertices(:,1),S.vertices(:,2),S.vertices(:,3),'FaceAlpha', 0.5, 'FaceColor', 'r');
hold on
end
coor = cell2mat(coor) ;
coor = unique(coor,'rows') ;
%
dt = delaunayTriangulation(coor(:,1),coor(:,2)) ;
x = dt.Points(:,1) ;
y = dt.Points(:,2) ;
%
idx = knnsearch(coor(:,1:2),[x,y]) ;
z = coor(idx,3) ;
tri = dt.ConnectivityList ;
figure
trisurf(tri,x,y,z)
  4 commentaires
KSSV
KSSV le 2 Nov 2017
I have edited the answer......now you will not get those unwanted peaks.....
Faez Alkadi
Faez Alkadi le 2 Nov 2017
Thank you KSSV, I appreciate you great effort.

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Bounding Regions dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by