This code includes algorithms for computing volumetric (octahedral and odeco) frame fields, described in detail in our preprint:
Palmer, D., Bommes, D., & Solomon, J. (2019). Algebraic Representations for Volumetric Frame Fields. arXiv preprint arXiv:1908.05411.
- Manopt 5.0
- Mosek 9.0 (C++ Fusion API)
- Intel TBB
- MatPlotLib Colormaps
- (Optional) Eigen 3
First, remember to build and install the Mosek Fusion API as described here.
The following commands will compile all MEX files and add the code to the MATLAB path.
cd src/batchop
mexbuild /path/to/tbb/include
cd ../sdp
mexbuild /path/to/tbb/include /path/to/mosek/9.0
cd ../..
install
The main commands for computing fields are MBO
, OctaManopt
,
and OdecoManopt
.
Some tetrahedral meshes in Medit
format are included in the meshes
directory for convenience. To load a mesh, use
mesh = ImportMesh('meshes/rockerarm_91k.mesh'); % Medit format
We also support meshes in Tetgen
format:
mesh = ImportMesh('path/to/file.node'); % Tetgen .node/.ele format
The following commands compute octahedral and odeco fields by MBO with random initialization:
qOcta = MBO(mesh, OctaMBO, [], 1, 0);
qOdeco = MBO(mesh, OdecoMBO, [], 1, 0);
For modified MBO as described in our paper, set the diffusion time multiplier and exponent as follows:
qOcta = MBO(mesh, OctaMBO, [], 50, 3);
qOdeco = MBO(mesh, OdecoMBO, [], 50, 3);
The following lines compute octahedral and odeco fields by RTR with specified initial fields. Drop the second argument for random initialization.
qOcta = OctaManopt(mesh, qOcta);
qOdeco = OdecoManopt(mesh, qOdeco);
To visualize an octahedral or odeco field, use VisualizeResult
, which plots the integral curves and singular structure, e.g.,
VisualizeResult(mesh, qOdeco);
PlotInterpolatedFrames
plots field-oriented cubes at specified sample points:
PlotInterpolatedFrames(q, mesh.tetra, samples)
where samples
is a
We have included scripts for generating (MATLAB versions of) figures that appear in the paper in the figures/
directory.
-
EnergyTest
compares energy divergence behavior of octahedral and odeco fields, as in Figure 8 in the paper. -
PrismFigures
generates a figure similar to Figure 1 in the paper, showing scaling behavior of an odeco field. -
To verify the exactness of SDP projection into the octahedral and odeco varieties, respectively, execute
OctaExactnessTest(n); OdecoExactnessTest(n);
for a sufficiently large value of
n
.
The following two scripts display comparisons to previous work. These require a patched version of the code released with [Ray et al. 2016]. To avoid any possible copyright issues, we are not including this code in this public release. Please contact the authors if you need it.
-
ConvergenceComparisons
generates figures like Figures 5 and 6 in the paper:ConvergenceComparisons('../meshes', 'path/to/output/');
-
GenerateComparisons
generates a table like that in our supplemental document:GenerateComparisons('../meshes', 'path/to/output/');