mirror of https://github.com/CGAL/cgal
Some changes after Sebastien's review
This commit is contained in:
parent
56de16c9c0
commit
162d74baef
|
|
@ -21,7 +21,7 @@ as a gradient red/green corresponding to close/far from the source vertices.
|
|||
|
||||
The heat method is highly efficient, since the algorithm
|
||||
boils down to two standard sparse linear algebra problems. It is especially
|
||||
useful in situations where one wishes to evaluate repeated distance queries
|
||||
useful in situations where one wishes to perform repeated distance queries
|
||||
on a fixed domain, since precomputation done for the first query can be re-used.
|
||||
|
||||
As a rule of thumb, the method works well on triangle meshes, which are
|
||||
|
|
@ -118,7 +118,7 @@ The algorithm must then be translated in to a discrete algorithm by replacing th
|
|||
|
||||
The heat equation can be discretized in time using a single backward Euler step. This means the following equation must be solved:
|
||||
|
||||
\f$(id-t\Delta)u_t = \delta(x) \f$ where \f$\delta(x)\f$ is a Dirac delta encoding an 'infinite' spike of heat (1 if x is in the source set, 0 otherwise)
|
||||
\f$(id-t\Delta)u_t = \delta(x) \f$ where \f$\delta(x)\f$ is a Dirac delta encoding an "infinite" spike of heat (1 if x is in the source set, 0 otherwise)
|
||||
over the entire domain M, where id is the identity operator.
|
||||
|
||||
The spatial discretization depends on the choice of discrete surface representation.
|
||||
|
|
@ -163,8 +163,8 @@ the polyhedron and do not have to correspond to edges of the input triangulation
|
|||
explicitly; instead, we simply keep track of their lengths as the triangulation is updated. These lengths are
|
||||
sufficient to determine areas and angles of the intrinsic triangles, and in turn, the new cotan Laplace matrix.
|
||||
|
||||
An edge of a mesh is locally Delaunay if the sum of opposite angles is no smaller than pi, or equivalently,
|
||||
if the cotangents of the opposing angles is nonnegative. A mesh is Delaunay if all of its edges are locally Delaunay.
|
||||
An edge of a mesh is locally Delaunay if the sum of opposite angles is not smaller than pi, or equivalently,
|
||||
if the cotangents of the opposing angles are non-negative. A mesh is Delaunay if all of its edges are locally Delaunay.
|
||||
|
||||
A standard algorithm to convert a given planar triangulation into a Delaunay triangulation is
|
||||
to flip non-Delaunay edges in a mesh until the mesh is Delaunay.
|
||||
|
|
@ -216,10 +216,10 @@ The algorithm is as follows:
|
|||
|
||||
The time complexity of the algorithm is determined primarily by the
|
||||
choice of linear solver. In the current implementation, Cholesky
|
||||
prefactorization is roughly \f$ O(N^{1.5})\f$ and evaluation of distance is
|
||||
prefactorization is roughly \f$ O(N^{1.5})\f$ and computation of distances is
|
||||
roughly \f$ O(N)\f$, where \f$ N\f$ is the number of vertices in the triangulation.
|
||||
The algorithm uses two \f$ N \times N\f$ matrices, both with the same pattern of
|
||||
nonzeros as the graph Laplacian of the edge graph (roughly 7 nonzeros
|
||||
non-zeros (in average 7 non-zeros
|
||||
per row/column). The cost of computation is independent of the size
|
||||
of the source set. Primitive operations include sparse numerical
|
||||
linear algebra (in double precision), and basic arithmetic operations
|
||||
|
|
|
|||
|
|
@ -45,6 +45,4 @@ source vertices. }
|
|||
- `CGAL::Heat_method_3::estimate_geodesic_distances()`
|
||||
|
||||
*/
|
||||
\todo Add more detailed cache
|
||||
\todo Add Neumann and Dirichlet boundary conditions
|
||||
\todo Check if suitesparse is more efficient than eigen
|
||||
|
||||
|
|
|
|||
|
|
@ -44,10 +44,6 @@
|
|||
#include <vector>
|
||||
#include <set>
|
||||
|
||||
#ifdef CGAL_TESTSUITE
|
||||
struct Heat_method_3_private_tests;
|
||||
#endif
|
||||
|
||||
namespace CGAL {
|
||||
namespace Heat_method_3 {
|
||||
|
||||
|
|
@ -71,9 +67,6 @@ template <typename TriangleMesh,
|
|||
class Surface_mesh_geodesic_distances_3
|
||||
{
|
||||
protected:
|
||||
#ifdef CGAL_TESTSUITE
|
||||
friend Surface_mesh_geodesic_distances_3_private_tests;
|
||||
#endif
|
||||
/// Polygon_mesh typedefs
|
||||
typedef typename boost::graph_traits<TriangleMesh> graph_traits;
|
||||
typedef typename graph_traits::vertex_descriptor vertex_descriptor;
|
||||
|
|
|
|||
|
|
@ -145,6 +145,12 @@ public:
|
|||
/// \name Types
|
||||
/// @{
|
||||
|
||||
/*!
|
||||
Index type
|
||||
*/
|
||||
typedef unspecified_type Index;
|
||||
|
||||
|
||||
/*!
|
||||
|
||||
*/
|
||||
|
|
|
|||
Loading…
Reference in New Issue