Surface Centers
These routines compute geometric centers of point sets and distrubtions on surfaces.
A “center” c is a point on the surface which is a local minimum of the energy: $$ c = \underset{m}{\textrm{argmin}}\sum_{y \in \mathcal{Y}} d(m,y)^p $$ where \mathcal{Y} is a set of sites to take the average of and d(\cdot, \cdot) denotes the geodesic distance.
Centers on surfaces with p=2 (“means”) are known as Karcher Means or Frechet Means. Centers on surfaces with p=1 (“medians”) are known as geometric medians.
Centers are not unique!
In general, there will not be a single unqiue “center” of a point set or distribution on a surface. For nearby sites there may be a single center, but in general this may not be the case.
The routines in this section use random initialization to report a center. As such, the results may be different under repeated runs of the procedure.
#include "geometrycentral/surface/surface_centers.h"
Centers of points
SurfacePoint findCenter(IntrinsicGeometryInterface& geom, const std::vector<Vertex>& vertexPts, int p = 2)
Find a center of a collection of points at vertices.
p
must be either 1 or 2.
SurfacePoint findCenter(IntrinsicGeometryInterface& geom, VectorHeatMethodSolver& solver, const std::vector<Vertex>& vertexPts, int p = 2)
Like the above method, but uses an existing solver object, which saves precomputation.
Centers of distributions
SurfacePoint findCenter(IntrinsicGeometryInterface& geom, const VertexData<double>& distribution, int p = 2)
Find a center of a distribution at vertices.
Note that the input distribution
is treated as integrated values at vertices. If your distribution is “per-unit-area”, you should multiply times vertex area before passing it in.
p
must be either 1 or 2.
SurfacePoint findCenter(IntrinsicGeometryInterface& geom, VectorHeatMethodSolver& solver, const VertexData<double>& distribution, int p = 2)
Like the above method, but uses an existing solver object, which saves precomputation.
Citation
These algorithms are described in The Vector Heat Method, the appropriate citation is:
@article{sharp2019vector,
title={The Vector Heat Method},
author={Sharp, Nicholas and Soliman, Yousuf and Crane, Keenan},
journal={ACM Transactions on Graphics (TOG)},
volume={38},
number={3},
pages={24},
year={2019},
publisher={ACM}
}