필터 지우기
필터 지우기

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

조회 수: 7 (최근 30일)
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

채택된 답변

KSSV
KSSV 2017년 10월 27일
편집: KSSV 2017년 11월 2일
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
KSSV
KSSV 2017년 11월 2일
I have edited the answer......now you will not get those unwanted peaks.....

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

Community Treasure Hunt

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

Start Hunting!

Translated by