Last change
on this file was 27035, checked in by Mathieu Morlighem, 3 years ago |
merged trunk-jpl and trunk for revision 27033
|
File size:
1.1 KB
|
Line | |
---|
1 | function levelsetnew = reinitializelevelset(md,levelset)
|
---|
2 | %REINITIALIZELEVELSET - reinitialize levelset as a signed distance function
|
---|
3 | %
|
---|
4 | % Usage:
|
---|
5 | % levelsetnew = reinitializelevelset(md,levelset)
|
---|
6 |
|
---|
7 | % if md is 3d, levelset should be projected on a 2d mesh
|
---|
8 |
|
---|
9 | if isempty(levelset), error('levelset provided is empty'); end
|
---|
10 | if dimension(md.mesh)==3,
|
---|
11 | if length(levelset)~=md.mesh.numberofvertices2d, error('levelset provided should be specified at the 2d vertices of the mesh'); end
|
---|
12 | else
|
---|
13 | if length(levelset)~=md.mesh.numberofvertices, error('levelset provided should be specified at the vertices of the mesh'); end
|
---|
14 | end
|
---|
15 |
|
---|
16 | %First: extract segments
|
---|
17 | contours=isoline(md,levelset,'value',0);
|
---|
18 |
|
---|
19 | %Now, make this a distance field (might not be closed)
|
---|
20 | levelsetnew=abs(ExpToLevelSet(md.mesh.x,md.mesh.y,contours)); % levelsetnew comes on the 3d vertices, if mesh is 3d
|
---|
21 |
|
---|
22 | %Finally, change sign
|
---|
23 | pos=find(levelset<0); % if mesh is 3d, it refers to the vertices on the base
|
---|
24 | if dimension(md.mesh)==3
|
---|
25 | for i=1:md.mesh.numberoflayers
|
---|
26 | pos3d=pos+(i-1)*md.mesh.numberofvertices2d;
|
---|
27 | levelsetnew(pos3d)=-levelsetnew(pos3d);
|
---|
28 | end
|
---|
29 | else
|
---|
30 | levelsetnew(pos)=-levelsetnew(pos);
|
---|
31 | end
|
---|
Note:
See
TracBrowser
for help on using the repository browser.