From 86adba238c17e1cf4c429af06d6e39fe2db2fa84 Mon Sep 17 00:00:00 2001 From: Laurent Saboret Date: Mon, 20 Mar 2006 11:22:05 +0000 Subject: [PATCH] Clarify documentation about symmetric/asymmetric matrices --- .../concepts/SparseLinearAlgebraTraits_d.h | 3 -- .../Surface_mesh_parameterization/basics.tex | 6 ++-- .../parameterization_methods.tex | 33 +++++++++++-------- .../parameterizer_class_diagram.eps | 10 +++--- ...parameterizer_class_diagram_simplified.eps | 10 +++--- .../parameterizers_class_hierarchy.eps | 10 +++--- .../software_design.tex | 14 ++++---- .../Barycentric_mapping_parameterizer_3.tex | 8 +++-- .../Discrete_authalic_parameterizer_3.tex | 2 -- ...Discrete_conformal_map_parameterizer_3.tex | 10 ++++-- .../LSCM_parameterizer_3.tex | 5 --- ...Mean_value_coordinates_parameterizer_3.tex | 2 -- .../SparseLinearAlgebraTraits_d.tex | 3 -- .../Taucs_symmetric_solver_traits.tex | 7 ++-- .../intro.tex | 7 ++-- .../Barycentric_mapping_parameterizer_3.h | 22 +++++++------ .../CGAL/Discrete_authalic_parameterizer_3.h | 5 +-- .../Discrete_conformal_map_parameterizer_3.h | 23 ++++++------- .../CGAL/Fixed_border_parameterizer_3.h | 5 +-- .../include/CGAL/LSCM_parameterizer_3.h | 21 +++++------- .../Mean_value_coordinates_parameterizer_3.h | 5 +-- .../include/CGAL/Taucs_solver_traits.h | 7 ++-- 22 files changed, 104 insertions(+), 114 deletions(-) diff --git a/Surface_mesh_parameterization/doc/concepts/SparseLinearAlgebraTraits_d.h b/Surface_mesh_parameterization/doc/concepts/SparseLinearAlgebraTraits_d.h index 8434f87074d..e889cd45556 100644 --- a/Surface_mesh_parameterization/doc/concepts/SparseLinearAlgebraTraits_d.h +++ b/Surface_mesh_parameterization/doc/concepts/SparseLinearAlgebraTraits_d.h @@ -21,9 +21,6 @@ /// The concept SparseLinearAlgebraTraits_d /// is used to solve sparse linear systems "A*X = B". /// -/// @todo Add to SparseLinearAlgebraTraits_d the ability to solve -/// linear systems in the least squares sense. -/// /// Sub-concept: This is a sub-concept of LinearAlgebraTraits_d. class SparseLinearAlgebraTraits_d diff --git a/Surface_mesh_parameterization/doc_tex/Surface_mesh_parameterization/basics.tex b/Surface_mesh_parameterization/doc_tex/Surface_mesh_parameterization/basics.tex index e658c89cdaf..f1e2ecc88a5 100644 --- a/Surface_mesh_parameterization/doc_tex/Surface_mesh_parameterization/basics.tex +++ b/Surface_mesh_parameterization/doc_tex/Surface_mesh_parameterization/basics.tex @@ -77,15 +77,15 @@ Each of these surface parameterization methods is templated by the input mesh type, a border parameterization and a solver: % Insert image parameterizer_class_diagram_simplified.png/eps -% with title "A parameterizer UML class diagram (simplified)" +% with title "A parameterizer UML class diagram (simplified)" and scale = 1:1 \begin{center} \label{Surface_mesh_parameterization-fig-parameterizer_class_diagram_simplified} % Image \begin{ccTexOnly} - \includegraphics[width=0.80\textwidth]{Surface_mesh_parameterization/parameterizer_class_diagram_simplified} % omit .eps suffix + \includegraphics{Surface_mesh_parameterization/parameterizer_class_diagram_simplified} % omit .eps suffix \end{ccTexOnly} \begin{ccHtmlOnly} -

+

\end{ccHtmlOnly} % Title \begin{figure}[h] diff --git a/Surface_mesh_parameterization/doc_tex/Surface_mesh_parameterization/parameterization_methods.tex b/Surface_mesh_parameterization/doc_tex/Surface_mesh_parameterization/parameterization_methods.tex index b3c3eefc943..159fcc87921 100644 --- a/Surface_mesh_parameterization/doc_tex/Surface_mesh_parameterization/parameterization_methods.tex +++ b/Surface_mesh_parameterization/doc_tex/Surface_mesh_parameterization/parameterization_methods.tex @@ -25,18 +25,20 @@ Tutte~\cite{t-hdg-63}. In parameter space, each vertex is placed at the barycenter of its neighbors to achieve the so-called convex combination condition. This algorithm amounts to solve one sparse linear solver for each set of parameter coordinates, with a -\#vertices x \#vertices sparse and symmetric positive definite matrix. +\#vertices x \#vertices sparse and symmetric positive definite matrix +(if the border vertices are eliminated from the linear system). A coefficient $(i, j)$ of the matrix is set to 1 for an edge linking the vertex $v_i$ to the vertex $v_j$, to minus the degree of the vertex $v_i$ for a diagonal element, and to 0 for any other matrix -entry. Although a bijective mapping is guaranteed when the border is convex, this method does not minimize angles nor areas distortion. +entry. Although a bijective mapping is guaranteed when the border is convex, +this method does not minimize angles nor areas distortion. % Tutte barycentric mapping \begin{center} \label{Surface_mesh_parameterization-fig-uniform} % Image \begin{ccTexOnly} - \includegraphics[width=1.0\textwidth]{Surface_mesh_parameterization/uniform} + \includegraphics[width=0.9\textwidth]{Surface_mesh_parameterization/uniform} \end{ccTexOnly} \begin{ccHtmlOnly}

@@ -58,18 +60,21 @@ al. to the graphics community~\cite{cgal:eddhls-maam-95}. It attempts to lower angle deformation by minimizing a discrete version of the Dirichlet energy as derived by Pinkall and Polthier~\cite{cgal:pp-cdmsc-93}. A one-to-one mapping is guaranteed -only when the two following conditions are fulfilled: the barycentric mapping condition (each vertex in parameter space is a convex combination if -its neighboring vertices), and the border is convex. This method solves two \#vertices x \#vertices sparse linear +only when the two following conditions are fulfilled: the barycentric mapping +condition (each vertex in parameter space is a convex combination if +its neighboring vertices), and the border is convex. +This method solves two \#vertices x \#vertices sparse linear systems. The matrix (the same for both systems) is sparse and symmetric definite -positive, thus can be efficiently solved using dedicated linear -solvers. +positive (if the border vertices are eliminated from the linear system +and if the mesh contains no hole), +thus can be efficiently solved using dedicated linear solvers. % Discrete conformal map \begin{center} \label{Surface_mesh_parameterization-fig-conformal} % Image \begin{ccTexOnly} - \includegraphics[width=0.45\textwidth]{Surface_mesh_parameterization/conformal} + \includegraphics[width=0.9\textwidth]{Surface_mesh_parameterization/conformal} \end{ccTexOnly} \begin{ccHtmlOnly}

@@ -90,7 +95,8 @@ optimized so as to be a convex combination of its neighboring vertices. The barycentric coordinates are this time unconditionally positive, by deriving an application of the mean theorem for harmonic functions. This method is in essence an approximation of the discrete conformal -maps, with a guaranteed one-to-one mapping when the border is convex. This method solves two \#vertices x \#vertices sparse linear systems. The matrix (the +maps, with a guaranteed one-to-one mapping when the border is convex. +This method solves two \#vertices x \#vertices sparse linear systems. The matrix (the same for both systems) is asymmetric. % Floater mean value coordinates @@ -98,7 +104,7 @@ same for both systems) is asymmetric. \label{Surface_mesh_parameterization-fig-floater} % Image \begin{ccTexOnly} - \includegraphics[width=1.0\textwidth]{Surface_mesh_parameterization/floater} + \includegraphics[width=0.9\textwidth]{Surface_mesh_parameterization/floater} \end{ccTexOnly} \begin{ccHtmlOnly}

@@ -127,7 +133,7 @@ for both systems) is asymmetric. \label{Surface_mesh_parameterization-fig-authalic} % Image \begin{ccTexOnly} - \includegraphics[width=1.0\textwidth]{Surface_mesh_parameterization/authalic} + \includegraphics[width=0.9\textwidth]{Surface_mesh_parameterization/authalic} \end{ccTexOnly} \begin{ccHtmlOnly}

@@ -204,7 +210,8 @@ $u,v$ coordinates for each vertex along the border. \ccc{CGAL::LSCM_parameterizer_3} \\ The Least Squares Conformal Maps (LSCM) parameterization method has -been introduced by L\'evy et al.~\cite{cgal:lprm-lscm-02}. It corresponds to a conformal method with a free border (at least two +been introduced by L\'evy et al.~\cite{cgal:lprm-lscm-02}. +It corresponds to a conformal method with a free border (at least two vertices have to be constrained to obtain a unique solution), which allows further lowering of the angle distortion. A one-to-one mapping is not guaranteed by this method. It solves a (2 $\times$ @@ -216,7 +223,7 @@ which implies solving a symmetric matrix. \label{Surface_mesh_parameterization-fig-LSCM} % Image \begin{ccTexOnly} - \includegraphics[width=1.0\textwidth]{Surface_mesh_parameterization/LSCM} + \includegraphics[width=0.9\textwidth]{Surface_mesh_parameterization/LSCM} \end{ccTexOnly} \begin{ccHtmlOnly}

diff --git a/Surface_mesh_parameterization/doc_tex/Surface_mesh_parameterization/parameterizer_class_diagram.eps b/Surface_mesh_parameterization/doc_tex/Surface_mesh_parameterization/parameterizer_class_diagram.eps index 0aa43b5a1dc..6f95da98d8f 100644 --- a/Surface_mesh_parameterization/doc_tex/Surface_mesh_parameterization/parameterizer_class_diagram.eps +++ b/Surface_mesh_parameterization/doc_tex/Surface_mesh_parameterization/parameterizer_class_diagram.eps @@ -1,7 +1,7 @@ %!PS-Adobe-3.0 EPSF-3.0 -%%Creator: GIMP PostScript file plugin V 1,16 by Peter Kirchgessner -%%Title: Z:\src\cgal\SVNROOT\trunk\Surface_mesh_parameterization\doc_tex\Surface_mesh_parameterization\parameterizer_class_diagram.eps -%%CreationDate: Tue Mar 07 16:41:41 2006 +%%Creator: GIMP PostScript file plugin V 1.17 by Peter Kirchgessner +%%Title: parameterizer_class_diagram.eps +%%CreationDate: Fri Mar 17 17:24:00 2006 %%DocumentData: Clean7Bit %%LanguageLevel: 2 %%Pages: 1 @@ -15,8 +15,8 @@ % Translate for offset 14.173228346456694 14.173228346456694 translate % Translate to begin of first scanline -0 281.28000000000003 translate -404.15999999999997 -281.28000000000003 scale +0 281.25674944204616 translate +404.12659220171139 -281.25674944204616 scale % Image geometry 842 586 8 % Transformation matrix diff --git a/Surface_mesh_parameterization/doc_tex/Surface_mesh_parameterization/parameterizer_class_diagram_simplified.eps b/Surface_mesh_parameterization/doc_tex/Surface_mesh_parameterization/parameterizer_class_diagram_simplified.eps index 12e3d8f6d6a..c331df7397e 100644 --- a/Surface_mesh_parameterization/doc_tex/Surface_mesh_parameterization/parameterizer_class_diagram_simplified.eps +++ b/Surface_mesh_parameterization/doc_tex/Surface_mesh_parameterization/parameterizer_class_diagram_simplified.eps @@ -1,7 +1,7 @@ %!PS-Adobe-3.0 EPSF-3.0 -%%Creator: GIMP PostScript file plugin V 1,16 by Peter Kirchgessner -%%Title: Z:\src\cgal\SVNROOT\trunk\Surface_mesh_parameterization\doc_tex\Surface_mesh_parameterization\parameterizer_class_diagram_simplified.eps -%%CreationDate: Tue Mar 07 16:28:42 2006 +%%Creator: GIMP PostScript file plugin V 1.17 by Peter Kirchgessner +%%Title: parameterizer_class_diagram_simplified.eps +%%CreationDate: Fri Mar 17 17:26:45 2006 %%DocumentData: Clean7Bit %%LanguageLevel: 2 %%Pages: 1 @@ -15,8 +15,8 @@ % Translate for offset 14.173228346456694 14.173228346456694 translate % Translate to begin of first scanline -0 125.27692213200341 translate -307.67244094488188 -125.27692213200341 scale +0 125.26538012701613 translate +307.64409448818901 -125.26538012701613 scale % Image geometry 641 261 8 % Transformation matrix diff --git a/Surface_mesh_parameterization/doc_tex/Surface_mesh_parameterization/parameterizers_class_hierarchy.eps b/Surface_mesh_parameterization/doc_tex/Surface_mesh_parameterization/parameterizers_class_hierarchy.eps index 85812cb25fe..08d598644de 100644 --- a/Surface_mesh_parameterization/doc_tex/Surface_mesh_parameterization/parameterizers_class_hierarchy.eps +++ b/Surface_mesh_parameterization/doc_tex/Surface_mesh_parameterization/parameterizers_class_hierarchy.eps @@ -1,7 +1,7 @@ %!PS-Adobe-3.0 EPSF-3.0 -%%Creator: GIMP PostScript file plugin V 1,16 by Peter Kirchgessner -%%Title: Z:\src\cgal\SVNROOT\trunk\Surface_mesh_parameterization\doc_tex\Surface_mesh_parameterization\parameterizers_class_hierarchy.eps -%%CreationDate: Tue Mar 07 16:08:08 2006 +%%Creator: GIMP PostScript file plugin V 1.17 by Peter Kirchgessner +%%Title: parameterizers_class_hierarchy.eps +%%CreationDate: Fri Mar 17 17:28:01 2006 %%DocumentData: Clean7Bit %%LanguageLevel: 2 %%Pages: 1 @@ -15,8 +15,8 @@ % Translate for offset 14.173228346456694 14.173228346456694 translate % Translate to begin of first scanline -0 92.159999999999997 translate -340.80000000000001 -92.159999999999997 scale +0 92.15238206974891 translate +340.77182952875899 -92.15238206974891 scale % Image geometry 710 192 8 % Transformation matrix diff --git a/Surface_mesh_parameterization/doc_tex/Surface_mesh_parameterization/software_design.tex b/Surface_mesh_parameterization/doc_tex/Surface_mesh_parameterization/software_design.tex index 0341df80b38..2cc3359eb5d 100644 --- a/Surface_mesh_parameterization/doc_tex/Surface_mesh_parameterization/software_design.tex +++ b/Surface_mesh_parameterization/doc_tex/Surface_mesh_parameterization/software_design.tex @@ -88,16 +88,16 @@ Therefore, the software design chosen is: \item Code factorization is achieved using a class hierarchy and (few) virtual methods. \end{itemize} -% Insert image parameterizer_class_diagram.png/eps with -% title "A parameterizer UML class diagram (main types and methods only)" +% Insert image parameterizer_class_diagram.png/eps with title +% "A parameterizer UML class diagram (main types and methods only)" and scale = 1:1 \begin{center} \label{Surface_mesh_parameterization-fig-parameterizer_class_diagram} % Image \begin{ccTexOnly} - \includegraphics[width=1.0\textwidth]{Surface_mesh_parameterization/parameterizer_class_diagram} + \includegraphics{Surface_mesh_parameterization/parameterizer_class_diagram} \end{ccTexOnly} \begin{ccHtmlOnly} -

+

\end{ccHtmlOnly} % Title \begin{figure}[h] @@ -106,15 +106,15 @@ Therefore, the software design chosen is: \end{center} % Insert image parameterizers_class_hierarchy.png/eps with -% title "Surface parameterizer classes hierarchy" +% title "Surface parameterizer classes hierarchy" and scale = 1:1 \begin{center} \label{Surface_mesh_parameterization-fig-parameterizers_class_hierarchy} % Image \begin{ccTexOnly} - \includegraphics[width=0.9\textwidth]{Surface_mesh_parameterization/parameterizers_class_hierarchy} + \includegraphics{Surface_mesh_parameterization/parameterizers_class_hierarchy} \end{ccTexOnly} \begin{ccHtmlOnly} -

+

\end{ccHtmlOnly} % Title \begin{figure}[h] diff --git a/Surface_mesh_parameterization/doc_tex/Surface_mesh_parameterization_ref/Barycentric_mapping_parameterizer_3.tex b/Surface_mesh_parameterization/doc_tex/Surface_mesh_parameterization_ref/Barycentric_mapping_parameterizer_3.tex index 92c841d8283..50dcbe995fd 100644 --- a/Surface_mesh_parameterization/doc_tex/Surface_mesh_parameterization_ref/Barycentric_mapping_parameterizer_3.tex +++ b/Surface_mesh_parameterization/doc_tex/Surface_mesh_parameterization_ref/Barycentric_mapping_parameterizer_3.tex @@ -27,8 +27,6 @@ The class Barycentric\_mapping\_parameterizer\_3 implements Tutte Barycentric Ma One-to-one mapping is guaranteed if the surface's border is mapped to a convex polygon. -As all parameterization algorithms of the package, this class is usually called via the global function parameterize(). - This class is a Strategy \cite{cgal:ghjv-dpero-95} called by the main parameterization algorithm Fixed\_border\_parameterizer\_3::parameterize(). Barycentric\_mapping\_parameterizer\_3:\begin{itemize} \item provides default BorderParameterizer\_3 and SparseLinearAlgebraTraits\_d template parameters that make sense.\item 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.\item implements an optimized version of is\_one\_to\_one\_mapping().\end{itemize} @@ -60,6 +58,12 @@ class BorderParameterizer\_3 = Circular\_border\_arc\_length\_parameterizer\_3$< class SparseLinearAlgebraTraits\_d = OpenNL::DefaultLinearSolverTraits$<$typename ParameterizationMesh\_3::NT$>$$>$ \\ class Barycentric\_mapping\_parameterizer\_3; +\begin{description} +\item[Parameters:] +\begin{description} +\item[ParameterizationMesh\_3]3D surface mesh. \item[BorderParameterizer\_3]Strategy to parameterize the surface border. \item[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. \end{description} +\end{description} + %END-AUTO(\ccParameters) diff --git a/Surface_mesh_parameterization/doc_tex/Surface_mesh_parameterization_ref/Discrete_authalic_parameterizer_3.tex b/Surface_mesh_parameterization/doc_tex/Surface_mesh_parameterization_ref/Discrete_authalic_parameterizer_3.tex index a6e456bc384..9ada90b86d1 100644 --- a/Surface_mesh_parameterization/doc_tex/Surface_mesh_parameterization_ref/Discrete_authalic_parameterizer_3.tex +++ b/Surface_mesh_parameterization/doc_tex/Surface_mesh_parameterization_ref/Discrete_authalic_parameterizer_3.tex @@ -29,8 +29,6 @@ DAP is a weak area-preserving parameterization. It is a compromise between area- One-to-one mapping is guaranteed if surface's border is mapped onto a convex polygon. -As all parameterization algorithms of the package, this class is usually called via the global function parameterize(). - This class is a Strategy \cite{cgal:ghjv-dpero-95} called by the main parameterization algorithm Fixed\_border\_parameterizer\_3::parameterize(). Discrete\_authalic\_parameterizer\_3:\begin{itemize} \item provides default BorderParameterizer\_3 and SparseLinearAlgebraTraits\_d template parameters that make sense.\item implements compute\_w\_ij() to compute w\_ij = (i, j) coefficient of matrix A for j neighbor vertex of i based on Discrete Authalic Parameterization algorithm.\end{itemize} diff --git a/Surface_mesh_parameterization/doc_tex/Surface_mesh_parameterization_ref/Discrete_conformal_map_parameterizer_3.tex b/Surface_mesh_parameterization/doc_tex/Surface_mesh_parameterization_ref/Discrete_conformal_map_parameterizer_3.tex index 36694fb3660..5c08142313b 100644 --- a/Surface_mesh_parameterization/doc_tex/Surface_mesh_parameterization_ref/Discrete_conformal_map_parameterizer_3.tex +++ b/Surface_mesh_parameterization/doc_tex/Surface_mesh_parameterization_ref/Discrete_conformal_map_parameterizer_3.tex @@ -29,8 +29,6 @@ This is a conformal parameterization, i.e. it attempts to preserve angles. One-to-one mapping is guaranteed if surface's border is mapped onto a convex polygon. -As all parameterization algorithms of the package, this class is usually called via the global function parameterize(). - This class is a Strategy \cite{cgal:ghjv-dpero-95} called by the main parameterization algorithm Fixed\_border\_parameterizer\_3::parameterize(). Discrete\_conformal\_map\_parameterizer\_3:\begin{itemize} \item provides default BorderParameterizer\_3 and SparseLinearAlgebraTraits\_d template parameters that make sense.\item implements compute\_w\_ij() to compute w\_ij = (i, j) coefficient of matrix A for j neighbor vertex of i based on Discrete Conformal Map method.\end{itemize} @@ -62,6 +60,12 @@ class BorderParameterizer\_3 = Circular\_border\_arc\_length\_parameterizer\_3$< class SparseLinearAlgebraTraits\_d = OpenNL::DefaultLinearSolverTraits$<$typename ParameterizationMesh\_3::NT$>$$>$ \\ class Discrete\_conformal\_map\_parameterizer\_3; +\begin{description} +\item[Parameters:] +\begin{description} +\item[ParameterizationMesh\_3]3D surface mesh. \item[BorderParameterizer\_3]Strategy to parameterize the surface border. \item[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. \end{description} +\end{description} + %END-AUTO(\ccParameters) @@ -103,7 +107,7 @@ Constructor. \ccMethod{virtual NT compute_w_ij (const Adaptor & mesh, Vertex_const_handle main_vertex_v_i, Vertex_around_vertex_const_circulator neighbor_vertex_v_j);} { -Compute w\_ij = (i, j) coefficient of matrix A for j neighbor vertex of i. +Compute w\_ij = (i,j) coefficient of matrix A for j neighbor vertex of i. } \ccGlue diff --git a/Surface_mesh_parameterization/doc_tex/Surface_mesh_parameterization_ref/LSCM_parameterizer_3.tex b/Surface_mesh_parameterization/doc_tex/Surface_mesh_parameterization_ref/LSCM_parameterizer_3.tex index 09e149e7edb..a708ad82c98 100644 --- a/Surface_mesh_parameterization/doc_tex/Surface_mesh_parameterization_ref/LSCM_parameterizer_3.tex +++ b/Surface_mesh_parameterization/doc_tex/Surface_mesh_parameterization_ref/LSCM_parameterizer_3.tex @@ -29,11 +29,6 @@ This is a conformal parameterization, i.e. it attempts to preserve angles. This is a free border parameterization. No need to map the surface's border onto a convex polygon (only two pinned vertices are needed to ensure a unique solution), but one-to-one mapping is NOT guaranteed. -As all parameterization algorithms of the package, this class is usually called via the global function parameterize(). - -\begin{description} -\item[Todo]Add to SparseLinearAlgebraTraits\_d the ability to solve linear systems in the least squares sense, then access to the solver via the traits class interface instead of calls specific to OpenNL.\end{description} - %END-AUTO(\ccDefinition) \ccInclude{CGAL/LSCM_parameterizer_3.h} diff --git a/Surface_mesh_parameterization/doc_tex/Surface_mesh_parameterization_ref/Mean_value_coordinates_parameterizer_3.tex b/Surface_mesh_parameterization/doc_tex/Surface_mesh_parameterization_ref/Mean_value_coordinates_parameterizer_3.tex index 64d98042ef7..d3321406d0a 100644 --- a/Surface_mesh_parameterization/doc_tex/Surface_mesh_parameterization_ref/Mean_value_coordinates_parameterizer_3.tex +++ b/Surface_mesh_parameterization/doc_tex/Surface_mesh_parameterization_ref/Mean_value_coordinates_parameterizer_3.tex @@ -29,8 +29,6 @@ This is a conformal parameterization, i.e. it attempts to preserve angles. One-to-one mapping is guaranteed if the surface's border is mapped to a convex polygon. -As all parameterization algorithms of the package, this class is usually called via the global function parameterize(). - This class is a Strategy \cite{cgal:ghjv-dpero-95} called by the main parameterization algorithm Fixed\_border\_parameterizer\_3::parameterize(). Mean\_value\_coordinates\_parameterizer\_3:\begin{itemize} \item provides default BorderParameterizer\_3 and SparseLinearAlgebraTraits\_d template parameters that make sense.\item implements compute\_w\_ij() to compute w\_ij = (i, j) coefficient of matrix A for j neighbor vertex of i based on Floater Mean Value Coordinates parameterization.\item implements an optimized version of is\_one\_to\_one\_mapping().\end{itemize} diff --git a/Surface_mesh_parameterization/doc_tex/Surface_mesh_parameterization_ref/SparseLinearAlgebraTraits_d.tex b/Surface_mesh_parameterization/doc_tex/Surface_mesh_parameterization_ref/SparseLinearAlgebraTraits_d.tex index c6d648921d5..46b46f0b141 100644 --- a/Surface_mesh_parameterization/doc_tex/Surface_mesh_parameterization_ref/SparseLinearAlgebraTraits_d.tex +++ b/Surface_mesh_parameterization/doc_tex/Surface_mesh_parameterization_ref/SparseLinearAlgebraTraits_d.tex @@ -25,9 +25,6 @@ The concept SparseLinearAlgebraTraits\_d is used to solve sparse linear systems {\em A$\ast$X = B}. -\begin{description} -\item[Todo]Add to SparseLinearAlgebraTraits\_d the ability to solve linear systems in the least squares sense.\end{description} - %END-AUTO(\ccDefinition) diff --git a/Surface_mesh_parameterization/doc_tex/Surface_mesh_parameterization_ref/Taucs_symmetric_solver_traits.tex b/Surface_mesh_parameterization/doc_tex/Surface_mesh_parameterization_ref/Taucs_symmetric_solver_traits.tex index bbcd0b2879b..e1bd982b70a 100644 --- a/Surface_mesh_parameterization/doc_tex/Surface_mesh_parameterization_ref/Taucs_symmetric_solver_traits.tex +++ b/Surface_mesh_parameterization/doc_tex/Surface_mesh_parameterization_ref/Taucs_symmetric_solver_traits.tex @@ -23,10 +23,7 @@ % The section below is automatically generated. Do not edit! %START-AUTO(\ccDefinition) -The class Taucs\_symmetric\_solver\_traits is a traits class for solving SYMMETRIC DEFINIE POSITIVE sparse linear systems using TAUCS solvers family. The default solver is the Multifrontal Supernodal Cholesky Factorization. - -\begin{description} -\item[Todo]Add to Taucs\_symmetric\_solver\_traits the ability to solve linear systems in the least squares sense.\end{description} +The class Taucs\_symmetric\_solver\_traits is a traits class for solving SYMMETRIC DEFINITE POSITIVE sparse linear systems using TAUCS solvers family. The default solver is the Multifrontal Supernodal Cholesky Factorization. %END-AUTO(\ccDefinition) @@ -86,7 +83,7 @@ class Taucs\_symmetric\_solver\_traits; \ccConstructor{Taucs_symmetric_solver_traits (const char * options[] = NULL, const void * arguments[] = NULL);} { -Create a TAUCS sparse linear solver for SYMMETRIC DEFINIE POSITIVE matrices. The default solver is the Multifrontal Supernodal Cholesky Factorization. See taucs\_linsolve() documentation for the meaning of the 'options' and 'arguments' parameters. +Create a TAUCS sparse linear solver for SYMMETRIC DEFINITE POSITIVE matrices. The default solver is the Multifrontal Supernodal Cholesky Factorization. See taucs\_linsolve() documentation for the meaning of the 'options' and 'arguments' parameters. } \ccGlue \begin{description} diff --git a/Surface_mesh_parameterization/doc_tex/Surface_mesh_parameterization_ref/intro.tex b/Surface_mesh_parameterization/doc_tex/Surface_mesh_parameterization_ref/intro.tex index 6ff201135fb..39bcc75f163 100644 --- a/Surface_mesh_parameterization/doc_tex/Surface_mesh_parameterization_ref/intro.tex +++ b/Surface_mesh_parameterization/doc_tex/Surface_mesh_parameterization_ref/intro.tex @@ -178,8 +178,11 @@ efficient representation of sparse matrices and efficient iterative or direct linear solvers, we provide an interface to several sparse linear solvers: \begin{itemize} -\item OpenNL (Bruno L{\'e}vy) is shipped with \cgal. This is the default solver. -\item {\sc Taucs} is a state-of-the-art direct solver for sparse symmetric matrices. +\item + OpenNL (Bruno L{\'e}vy) is shipped with \cgal. This is the default solver. +\item + {\sc Taucs} is a state-of-the-art direct solver for sparse symmetric matrices. + It also includes an out-of-core general solver. \end{itemize} \ccc{OpenNL::DefaultLinearSolverTraits} in OpenNL package \\ diff --git a/Surface_mesh_parameterization/include/CGAL/Barycentric_mapping_parameterizer_3.h b/Surface_mesh_parameterization/include/CGAL/Barycentric_mapping_parameterizer_3.h index 8d09f9de8dd..f0488838f95 100644 --- a/Surface_mesh_parameterization/include/CGAL/Barycentric_mapping_parameterizer_3.h +++ b/Surface_mesh_parameterization/include/CGAL/Barycentric_mapping_parameterizer_3.h @@ -13,7 +13,7 @@ // // $URL$ // $Id$ -// +// // // Author(s) : Laurent Saboret, Pierre Alliez, Bruno Levy @@ -32,9 +32,6 @@ CGAL_BEGIN_NAMESPACE /// /// One-to-one mapping is guaranteed if the surface's border is mapped to a convex polygon. /// -/// As all parameterization algorithms of the package, this class -/// is usually called via the global function parameterize(). -/// /// This class is a Strategy [GHJV95] called by the main /// parameterization algorithm Fixed_border_parameterizer_3::parameterize(). /// Barycentric_mapping_parameterizer_3: @@ -50,16 +47,21 @@ CGAL_BEGIN_NAMESPACE /// Barycentric_mapping_parameterizer_3 class is a /// Strategy [GHJV95]: it implements a strategy of surface parameterization /// for models of ParameterizationMesh_3. +/// +/// Template parameters: +/// @param ParameterizationMesh_3 3D surface mesh. +/// @param BorderParameterizer_3 Strategy to parameterize the surface border. +/// @param 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. template < - class ParameterizationMesh_3, ///< 3D surface mesh - class BorderParameterizer_3 ///< Strategy to parameterize the surface border + class ParameterizationMesh_3, + class BorderParameterizer_3 = Circular_border_arc_length_parameterizer_3, - class SparseLinearAlgebraTraits_d ///< Traits class to solve a sparse linear system + class SparseLinearAlgebraTraits_d = OpenNL::DefaultLinearSolverTraits - ///< Note: the sparse linear system is symmetric iff - ///< Fixed_border_parameterizer_3 removes fixed vertices. > class Barycentric_mapping_parameterizer_3 : public Fixed_border_parameterizer_3 diff --git a/Surface_mesh_parameterization/include/CGAL/Discrete_authalic_parameterizer_3.h b/Surface_mesh_parameterization/include/CGAL/Discrete_authalic_parameterizer_3.h index 7e8ec41fc29..63ce7d0ed7a 100644 --- a/Surface_mesh_parameterization/include/CGAL/Discrete_authalic_parameterizer_3.h +++ b/Surface_mesh_parameterization/include/CGAL/Discrete_authalic_parameterizer_3.h @@ -13,7 +13,7 @@ // // $URL$ // $Id$ -// +// // // Author(s) : Laurent Saboret, Pierre Alliez, Bruno Levy @@ -36,9 +36,6 @@ CGAL_BEGIN_NAMESPACE /// /// One-to-one mapping is guaranteed if surface's border is mapped onto a convex polygon. /// -/// As all parameterization algorithms of the package, this class -/// is usually called via the global function parameterize(). -/// /// This class is a Strategy [GHJV95] called by the main /// parameterization algorithm Fixed_border_parameterizer_3::parameterize(). /// Discrete_authalic_parameterizer_3: diff --git a/Surface_mesh_parameterization/include/CGAL/Discrete_conformal_map_parameterizer_3.h b/Surface_mesh_parameterization/include/CGAL/Discrete_conformal_map_parameterizer_3.h index 7b25c990c56..0d01367460a 100644 --- a/Surface_mesh_parameterization/include/CGAL/Discrete_conformal_map_parameterizer_3.h +++ b/Surface_mesh_parameterization/include/CGAL/Discrete_conformal_map_parameterizer_3.h @@ -13,7 +13,7 @@ // // $URL$ // $Id$ -// +// // // Author(s) : Laurent Saboret, Pierre Alliez, Bruno Levy @@ -36,9 +36,6 @@ CGAL_BEGIN_NAMESPACE /// /// One-to-one mapping is guaranteed if surface's border is mapped onto a convex polygon. /// -/// As all parameterization algorithms of the package, this class -/// is usually called via the global function parameterize(). -/// /// This class is a Strategy [GHJV95] called by the main /// parameterization algorithm Fixed_border_parameterizer_3::parameterize(). /// Discrete_conformal_map_parameterizer_3: @@ -53,17 +50,21 @@ CGAL_BEGIN_NAMESPACE /// Discrete_conformal_map_parameterizer_3 class is a /// Strategy [GHJV95]: it implements a strategy of surface parameterization /// for models of ParameterizationMesh_3. +/// +/// Template parameters: +/// @param ParameterizationMesh_3 3D surface mesh. +/// @param BorderParameterizer_3 Strategy to parameterize the surface border. +/// @param 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. template < - class ParameterizationMesh_3, ///< 3D surface mesh - class BorderParameterizer_3 ///< Strategy to parameterize the surface border + class ParameterizationMesh_3, + class BorderParameterizer_3 = Circular_border_arc_length_parameterizer_3, - class SparseLinearAlgebraTraits_d ///< Traits class to solve a sparse linear system + class SparseLinearAlgebraTraits_d = OpenNL::DefaultLinearSolverTraits - ///< Note: the sparse linear system is symmetric - ///< (except around holes) iff - ///< Fixed_border_parameterizer_3 removes fixed vertices. > class Discrete_conformal_map_parameterizer_3 : public Fixed_border_parameterizer_3 A cannot be symmetric + // @todo Fixed_border_parameterizer_3 should remove border vertices + // from the linear systems in order to have a symmetric definite positive + // matrix for Tutte Barycentric Mapping and Discrete Conformal Map algorithms. initialize_system_from_mesh_border (A, Bu, Bv, mesh); // Fill the matrix for the inner vertices v_i: compute A's coefficient diff --git a/Surface_mesh_parameterization/include/CGAL/LSCM_parameterizer_3.h b/Surface_mesh_parameterization/include/CGAL/LSCM_parameterizer_3.h index 71c55a3fbb8..63116b25884 100644 --- a/Surface_mesh_parameterization/include/CGAL/LSCM_parameterizer_3.h +++ b/Surface_mesh_parameterization/include/CGAL/LSCM_parameterizer_3.h @@ -47,13 +47,6 @@ CGAL_BEGIN_NAMESPACE /// onto a convex polygon (only two pinned vertices are needed to ensure a /// unique solution), but one-to-one mapping is NOT guaranteed. /// -/// As all parameterization algorithms of the package, this class -/// is usually called via the global function parameterize(). -/// -/// @todo Add to SparseLinearAlgebraTraits_d the ability to solve -/// linear systems in the least squares sense, then access to the solver -/// via the traits class interface instead of calls specific to OpenNL. -/// /// Concept: Model of the ParameterizerTraits_3 concept. /// /// Design Pattern: @@ -63,14 +56,16 @@ CGAL_BEGIN_NAMESPACE template < - class ParameterizationMesh_3, ///< 3D surface mesh - class BorderParameterizer_3 ///< Strategy to parameterize the surface border + class ParameterizationMesh_3, ///< 3D surface mesh. + class BorderParameterizer_3 = Two_vertices_parameterizer_3, - ///< Class to parameterize two border vertices - class SparseLinearAlgebraTraits_d ///< Traits class to solve a sparse linear system + ///< Strategy to parameterize the surface border. + ///< The minimum is to parameterize two vertices. + class SparseLinearAlgebraTraits_d = OpenNL::SymmetricLinearSolverTraits - ///< Symmetric solver for solving a sparse linear - ///< system in the least squares sense + ///< Traits class to solve a sparse linear system. + ///< We may use a symmetric solver because LSCM + ///< solves the system in the least squares sense. > class LSCM_parameterizer_3 : public Parameterizer_traits_3 diff --git a/Surface_mesh_parameterization/include/CGAL/Mean_value_coordinates_parameterizer_3.h b/Surface_mesh_parameterization/include/CGAL/Mean_value_coordinates_parameterizer_3.h index 573a58845cb..06bd1cebcdb 100644 --- a/Surface_mesh_parameterization/include/CGAL/Mean_value_coordinates_parameterizer_3.h +++ b/Surface_mesh_parameterization/include/CGAL/Mean_value_coordinates_parameterizer_3.h @@ -13,7 +13,7 @@ // // $URL$ // $Id$ -// +// // // Author(s) : Laurent Saboret, Pierre Alliez, Bruno Levy @@ -35,9 +35,6 @@ CGAL_BEGIN_NAMESPACE /// /// One-to-one mapping is guaranteed if the surface's border is mapped to a convex polygon. /// -/// As all parameterization algorithms of the package, this class -/// is usually called via the global function parameterize(). -/// /// This class is a Strategy [GHJV95] called by the main /// parameterization algorithm Fixed_border_parameterizer_3::parameterize(). /// Mean_value_coordinates_parameterizer_3: diff --git a/Surface_mesh_parameterization/include/CGAL/Taucs_solver_traits.h b/Surface_mesh_parameterization/include/CGAL/Taucs_solver_traits.h index 53e79079e72..8db5621bfa8 100644 --- a/Surface_mesh_parameterization/include/CGAL/Taucs_solver_traits.h +++ b/Surface_mesh_parameterization/include/CGAL/Taucs_solver_traits.h @@ -36,13 +36,10 @@ CGAL_BEGIN_NAMESPACE /// The class Taucs_symmetric_solver_traits -/// is a traits class for solving SYMMETRIC DEFINIE POSITIVE sparse linear systems +/// is a traits class for solving SYMMETRIC DEFINITE POSITIVE sparse linear systems /// using TAUCS solvers family. /// The default solver is the Multifrontal Supernodal Cholesky Factorization. /// -/// @todo Add to Taucs_symmetric_solver_traits the ability to solve -/// linear systems in the least squares sense. -/// /// Concept: Model of the SparseLinearAlgebraTraits_d concept. template // Tested with T = taucs_single or taucs_double @@ -59,7 +56,7 @@ public: // Public operations public: - /// Create a TAUCS sparse linear solver for SYMMETRIC DEFINIE POSITIVE matrices. + /// Create a TAUCS sparse linear solver for SYMMETRIC DEFINITE POSITIVE matrices. /// The default solver is the Multifrontal Supernodal Cholesky Factorization. /// See taucs_linsolve() documentation for the meaning of the /// 'options' and 'arguments' parameters.