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
|
Rev | Line | |
---|
[22452] | 1 | function levelsetnew = reinitializelevelset(md,levelset)
|
---|
| 2 | %REINITIALIZELEVELSET - reinitialize levelset as a signed distance function
|
---|
| 3 | %
|
---|
| 4 | % Usage:
|
---|
| 5 | % levelsetnew = reinitializelevelset(md,levelset)
|
---|
| 6 |
|
---|
[24686] | 7 | % if md is 3d, levelset should be projected on a 2d mesh
|
---|
[22452] | 8 |
|
---|
[24686] | 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 |
|
---|
[22452] | 16 | %First: extract segments
|
---|
[27035] | 17 | contours=isoline(md,levelset,'value',0);
|
---|
[22452] | 18 |
|
---|
| 19 | %Now, make this a distance field (might not be closed)
|
---|
[24686] | 20 | levelsetnew=abs(ExpToLevelSet(md.mesh.x,md.mesh.y,contours)); % levelsetnew comes on the 3d vertices, if mesh is 3d
|
---|
[22452] | 21 |
|
---|
| 22 | %Finally, change sign
|
---|
[24686] | 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.