CGAL::Barycentric_mapping_parameterizer_3<ParameterizationMesh_3, BorderParameterizer_3, SparseLinearAlgebraTraits_d>

Definition

The class Barycentric_mapping_parameterizer_3 implements Tutte Barycentric Mapping algorithm [Tut63]. This algorithm is also called Tutte Uniform Weights by other authors.

One-to-one mapping is guaranteed if the surface's border is mapped to a convex polygon.

This class is a Strategy [GHJV95] called by the main parameterization algorithm Fixed_border_parameterizer_3::parameterize(). It provides default BorderParameterizer_3 and SparseLinearAlgebraTraits_d template parameters that make sense. It implements compute_w_ij() to compute w_ij = (i, j) coefficient of matrix A for j neighbor vertex of i based on Tutte Barycentric Mapping method. It implements an optimized version of is_one_to_one_mapping().

#include <CGAL/Barycentric_mapping_parameterizer_3.h>

Inherits From

Fixed_border_parameterizer_3<ParameterizationMesh_3, BorderParameterizer_3, SparseLinearAlgebraTraits_d>

Is Model for the Concepts

Model of the ParameterizerTraits_3 concept.

Design Pattern

Barycentric_mapping_parameterizer_3 class is a Strategy [GHJV95]: it implements a strategy of surface parameterization for models of ParameterizationMesh_3.

Parameters

The full template declaration is:

template<class ParameterizationMesh_3, class BorderParameterizer_3 = Circular_border_arc_length_parameterizer_3<ParameterizationMesh_3>, class SparseLinearAlgebraTraits_d = OpenNL::DefaultLinearSolverTraits<typename ParameterizationMesh_3::NT>>
class Barycentric_mapping_parameterizer_3;

Parameters


ParameterizationMesh_3: 3D surface mesh. BorderParameterizer_3: Strategy to parameterize the surface border. SparseLinearAlgebraTraits_d: Traits class to solve a sparse linear system. Note: the system is not symmetric because Fixed_border_parameterizer_3 does not remove (yet) border vertices from the system.

Creation

Barycentric_mapping_parameterizer_3<ParameterizationMesh_3, BorderParameterizer_3, SparseLinearAlgebraTraits_d> param ( Border_param border_param = Border_param(),
Sparse_LA sparse_la = Sparse_LA());
Constructor.
Parameters: 
border_param: Object that maps the surface's border to 2D space. sparse_la: Traits object to access a sparse linear system.

Operations

virtual NT param.compute_w_ij ( Adaptor, Vertex_const_handle, Vertex_around_vertex_const_circulator)
Compute w_ij = (i, j) coefficient of matrix A for j neighbor vertex of i.
Tutte Barycentric Mapping algorithm is the most simple one: w_ij = 1 for j neighbor vertex of i.
virtual bool param.is_one_to_one_mapping ( Adaptor, Matrix, Vector, Vector)
Check if 3D -> 2D mapping is one-to-one.
Theorem: one-to-one mapping is guaranteed if all w_ij coefficients are > 0 (for j vertex neighbor of i) and if the surface border is mapped onto a 2D convex polygon. All w_ij coefficients = 1 (for j vertex neighbor of i), thus mapping is guaranteed if the surface border is mapped onto a 2D convex polygon.

See Also

CGAL::Parameterizer_traits_3<ParameterizationMesh_3>
CGAL::Fixed_border_parameterizer_3<ParameterizationMesh_3, BorderParameterizer_3, SparseLinearAlgebraTraits_d>
CGAL::Discrete_authalic_parameterizer_3<ParameterizationMesh_3, BorderParameterizer_3, SparseLinearAlgebraTraits_d>
CGAL::Discrete_conformal_map_parameterizer_3<ParameterizationMesh_3, BorderParameterizer_3, SparseLinearAlgebraTraits_d>
CGAL::LSCM_parameterizer_3<ParameterizationMesh_3, BorderParameterizer_3, SparseLinearAlgebraTraits_d>
CGAL::Mean_value_coordinates_parameterizer_3<ParameterizationMesh_3, BorderParameterizer_3, SparseLinearAlgebraTraits_d>