Renaming 'VCM' to 'diagonalize'

This commit is contained in:
Simon Giraudot 2015-08-31 08:08:26 +02:00
parent 0f65a35553
commit 28e5432c16
27 changed files with 237 additions and 228 deletions

View File

@ -20,9 +20,9 @@
#ifdef CGAL_EIGEN3_ENABLED #ifdef CGAL_EIGEN3_ENABLED
#include <CGAL/Eigen_vcm_traits.h> #include <CGAL/Eigen_diagonalize_traits.h>
#else #else
#include <CGAL/Internal_vcm_traits.h> #include <CGAL/Internal_diagonalize_traits.h>
#endif #endif
#include <CGAL/Approximate_min_ellipsoid_d.h> #include <CGAL/Approximate_min_ellipsoid_d.h>
@ -162,10 +162,10 @@ namespace CGAL {
CGAL::cpp11::array<double, 2> eigenvalues; // Note: sorted ascendent. CGAL::cpp11::array<double, 2> eigenvalues; // Note: sorted ascendent.
#ifdef CGAL_EIGEN3_ENABLED #ifdef CGAL_EIGEN3_ENABLED
CGAL::Eigen_vcm_traits<double, 2>::diagonalize_selfadjoint_covariance_matrix CGAL::Eigen_diagonalize_traits<double, 2>::diagonalize_selfadjoint_covariance_matrix
(matrix, eigenvalues, eigenvectors); (matrix, eigenvalues, eigenvectors);
#else #else
CGAL::Internal_vcm_traits<double, 2>::diagonalize_selfadjoint_covariance_matrix CGAL::Internal_diagonalize_traits<double, 2>::diagonalize_selfadjoint_covariance_matrix
(matrix, eigenvalues, eigenvectors); (matrix, eigenvalues, eigenvectors);
#endif #endif
@ -209,10 +209,10 @@ namespace CGAL {
CGAL::cpp11::array<double, 9> eigenvectors; // Note: not necessarily normalized. CGAL::cpp11::array<double, 9> eigenvectors; // Note: not necessarily normalized.
CGAL::cpp11::array<double, 3> eigenvalues; // Note: sorted ascendent. CGAL::cpp11::array<double, 3> eigenvalues; // Note: sorted ascendent.
#ifdef CGAL_EIGEN3_ENABLED #ifdef CGAL_EIGEN3_ENABLED
CGAL::Eigen_vcm_traits<double, 3>::diagonalize_selfadjoint_covariance_matrix CGAL::Eigen_diagonalize_traits<double, 3>::diagonalize_selfadjoint_covariance_matrix
(matrix, eigenvalues, eigenvectors); (matrix, eigenvalues, eigenvectors);
#else #else
CGAL::Internal_vcm_traits<double, 3>::diagonalize_selfadjoint_covariance_matrix CGAL::Internal_diagonalize_traits<double, 3>::diagonalize_selfadjoint_covariance_matrix
(matrix, eigenvalues, eigenvectors); (matrix, eigenvalues, eigenvectors);
#endif #endif

View File

@ -39,8 +39,8 @@ namespace CGAL {
/// which however would result in selecting more points on sharper regions. /// which however would result in selecting more points on sharper regions.
/// More details are provided in \cgalCite{cgal:mog-vbcfe-11}. /// More details are provided in \cgalCite{cgal:mog-vbcfe-11}.
/// ///
/// \tparam VCM_traits is a model of `VCMTraits`. If Eigen 3 (or greater) is available and `CGAL_EIGEN3_ENABLED` is defined /// \tparam VCM_traits is a model of `DiagonalizeTraits`. If Eigen 3 (or greater) is available and `CGAL_EIGEN3_ENABLED` is defined
/// then an overload using `Eigen_vcm_traits` is provided and this template parameter can be omitted. /// then an overload using `Eigen_diagonalize_traits` is provided and this template parameter can be omitted.
/// \sa CGAL::compute_vcm()` /// \sa CGAL::compute_vcm()`
/// ///
template <class FT, class VCM_traits> template <class FT, class VCM_traits>
@ -73,9 +73,9 @@ vcm_is_on_feature_edge (cpp11::array<FT,6> &cov,
{ {
return vcm_is_on_feature_edge(cov, threshold, return vcm_is_on_feature_edge(cov, threshold,
#ifdef CGAL_EIGEN3_ENABLED #ifdef CGAL_EIGEN3_ENABLED
CGAL::Eigen_vcm_traits<double, 3>() CGAL::Eigen_diagonalize_traits<double, 3>()
#else #else
CGAL::Internal_vcm_traits<double, 3>() CGAL::Internal_diagonalize_traits<double, 3>()
#endif #endif
); );

View File

@ -33,9 +33,9 @@
#include <CGAL/Fuzzy_sphere.h> #include <CGAL/Fuzzy_sphere.h>
#ifdef CGAL_EIGEN3_ENABLED #ifdef CGAL_EIGEN3_ENABLED
#include <CGAL/Eigen_vcm_traits.h> #include <CGAL/Eigen_diagonalize_traits.h>
#else #else
#include <CGAL/Internal_vcm_traits.h> #include <CGAL/Internal_diagonalize_traits.h>
#endif #endif
#include <iterator> #include <iterator>
@ -370,8 +370,8 @@ vcm_estimate_normals (ForwardIterator first, ///< iterator over the first input
/// @tparam ForwardIterator iterator over input points. /// @tparam ForwardIterator iterator over input points.
/// @tparam PointPMap is a model of `ReadablePropertyMap` with a value_type = `Kernel::Point_3`. /// @tparam PointPMap is a model of `ReadablePropertyMap` with a value_type = `Kernel::Point_3`.
/// @tparam NormalPMap is a model of `WritablePropertyMap` with a value_type = `Kernel::Vector_3`. /// @tparam NormalPMap is a model of `WritablePropertyMap` with a value_type = `Kernel::Vector_3`.
/// \tparam VCM_traits is a model of `VCMTraits`. If Eigen 3 (or greater) is available and `CGAL_EIGEN3_ENABLED` is defined /// \tparam VCM_traits is a model of `DiagonalizeTraits`. If Eigen 3 (or greater) is available and `CGAL_EIGEN3_ENABLED` is defined
/// then an overload using `Eigen_vcm_traits` is provided and this template parameter can be omitted. /// then an overload using `Eigen_diagonalize_traits` is provided and this template parameter can be omitted.
// This variant deduces the kernel from the point property map // This variant deduces the kernel from the point property map
// and uses a radius for the convolution. // and uses a radius for the convolution.
@ -411,8 +411,8 @@ vcm_estimate_normals (ForwardIterator first, ///< iterator over the first input
/// @tparam ForwardIterator iterator over input points. /// @tparam ForwardIterator iterator over input points.
/// @tparam PointPMap is a model of `ReadablePropertyMap` with a value_type = `Kernel::Point_3`. /// @tparam PointPMap is a model of `ReadablePropertyMap` with a value_type = `Kernel::Point_3`.
/// @tparam NormalPMap is a model of `WritablePropertyMap` with a value_type = `Kernel::Vector_3`. /// @tparam NormalPMap is a model of `WritablePropertyMap` with a value_type = `Kernel::Vector_3`.
/// \tparam VCM_traits is a model of `VCMTraits`. If Eigen 3 (or greater) is available and `CGAL_EIGEN3_ENABLED` is defined /// \tparam VCM_traits is a model of `DiagonalizeTraits`. If Eigen 3 (or greater) is available and `CGAL_EIGEN3_ENABLED` is defined
/// then an overload using `Eigen_vcm_traits` is provided and this template parameter can be omitted. /// then an overload using `Eigen_diagonalize_traits` is provided and this template parameter can be omitted.
// This variant deduces the kernel from the point property map // This variant deduces the kernel from the point property map
// and uses a number of neighbors for the convolution. // and uses a number of neighbors for the convolution.
@ -456,9 +456,9 @@ vcm_estimate_normals (ForwardIterator first,
{ {
vcm_estimate_normals(first, beyond, point_pmap, normal_pmap, offset_radius, convolution_radius, vcm_estimate_normals(first, beyond, point_pmap, normal_pmap, offset_radius, convolution_radius,
#ifdef CGAL_EIGEN3_ENABLED #ifdef CGAL_EIGEN3_ENABLED
CGAL::Eigen_vcm_traits<double, 3>() CGAL::Eigen_diagonalize_traits<double, 3>()
#else #else
CGAL::Internal_vcm_traits<double, 3>() CGAL::Internal_diagonalize_traits<double, 3>()
#endif #endif
); );
} }
@ -477,9 +477,9 @@ vcm_estimate_normals (ForwardIterator first,
{ {
vcm_estimate_normals(first, beyond, point_pmap, normal_pmap, offset_radius, nb_neighbors_convolve, vcm_estimate_normals(first, beyond, point_pmap, normal_pmap, offset_radius, nb_neighbors_convolve,
#ifdef CGAL_EIGEN3_ENABLED #ifdef CGAL_EIGEN3_ENABLED
CGAL::Eigen_vcm_traits<double, 3>() CGAL::Eigen_diagonalize_traits<double, 3>()
#else #else
CGAL::Internal_vcm_traits<double, 3>() CGAL::Internal_diagonalize_traits<double, 3>()
#endif #endif
); );

View File

@ -29,10 +29,10 @@
#include <CGAL/linear_least_squares_fitting_circles_2.h> #include <CGAL/linear_least_squares_fitting_circles_2.h>
#include <CGAL/linear_least_squares_fitting_rectangles_2.h> #include <CGAL/linear_least_squares_fitting_rectangles_2.h>
#include <CGAL/Dimension.h> #include <CGAL/Dimension.h>
#include <CGAL/Internal_vcm_traits.h> #include <CGAL/Internal_diagonalize_traits.h>
#ifdef CGAL_EIGEN3_ENABLED #ifdef CGAL_EIGEN3_ENABLED
#include <CGAL/Eigen_vcm_traits.h> #include <CGAL/Eigen_diagonalize_traits.h>
#endif #endif
#include <iterator> #include <iterator>
@ -42,7 +42,7 @@ namespace CGAL {
template < typename InputIterator, template < typename InputIterator,
typename Kernel, typename Kernel,
typename Tag, typename Tag,
typename Vcm_traits> typename Diagonalize_traits>
inline inline
typename Kernel::FT typename Kernel::FT
linear_least_squares_fitting_2(InputIterator first, linear_least_squares_fitting_2(InputIterator first,
@ -51,16 +51,16 @@ linear_least_squares_fitting_2(InputIterator first,
typename Kernel::Point_2& centroid, typename Kernel::Point_2& centroid,
const Tag& tag, const Tag& tag,
const Kernel& kernel, const Kernel& kernel,
const Vcm_traits vcm_traits) const Diagonalize_traits diagonalize_traits)
{ {
typedef typename std::iterator_traits<InputIterator>::value_type Value_type; typedef typename std::iterator_traits<InputIterator>::value_type Value_type;
return internal::linear_least_squares_fitting_2(first, beyond, line, return internal::linear_least_squares_fitting_2(first, beyond, line,
centroid,(Value_type*)NULL,kernel,tag, centroid,(Value_type*)NULL,kernel,tag,
vcm_traits); diagonalize_traits);
} }
// deduces the kernel from the points in container. // deduces the kernel from the points in container.
// Use default Vcm_traits // Use default Diagonalize_traits
template < typename InputIterator, template < typename InputIterator,
typename Line, typename Line,
typename Point, typename Point,
@ -78,9 +78,9 @@ linear_least_squares_fitting_2(InputIterator first,
return CGAL::linear_least_squares_fitting_2 return CGAL::linear_least_squares_fitting_2
(first,beyond,line,centroid,tag,Kernel(), (first,beyond,line,centroid,tag,Kernel(),
#ifdef CGAL_EIGEN3_ENABLED #ifdef CGAL_EIGEN3_ENABLED
Eigen_vcm_traits<typename Kernel::FT, 2>() Eigen_diagonalize_traits<typename Kernel::FT, 2>()
#else #else
Internal_vcm_traits<typename Kernel::FT, 2>() Internal_diagonalize_traits<typename Kernel::FT, 2>()
#endif #endif
); );
} }
@ -100,9 +100,9 @@ linear_least_squares_fitting_2(InputIterator first,
typename Kernel::Point_2 centroid; // unused typename Kernel::Point_2 centroid; // unused
return CGAL::linear_least_squares_fitting_2(first,beyond,line,centroid,tag,Kernel(), return CGAL::linear_least_squares_fitting_2(first,beyond,line,centroid,tag,Kernel(),
#ifdef CGAL_EIGEN3_ENABLED #ifdef CGAL_EIGEN3_ENABLED
Eigen_vcm_traits<typename Kernel::FT, 2>() Eigen_diagonalize_traits<typename Kernel::FT, 2>()
#else #else
Internal_vcm_traits<typename Kernel::FT, 2>() Internal_diagonalize_traits<typename Kernel::FT, 2>()
#endif #endif
); );
} }

View File

@ -29,9 +29,9 @@
#include <CGAL/linear_least_squares_fitting_tetrahedra_3.h> #include <CGAL/linear_least_squares_fitting_tetrahedra_3.h>
#include <CGAL/linear_least_squares_fitting_spheres_3.h> #include <CGAL/linear_least_squares_fitting_spheres_3.h>
#include <CGAL/Internal_vcm_traits.h> #include <CGAL/Internal_diagonalize_traits.h>
#ifdef CGAL_EIGEN3_ENABLED #ifdef CGAL_EIGEN3_ENABLED
#include <CGAL/Eigen_vcm_traits.h> #include <CGAL/Eigen_diagonalize_traits.h>
#endif #endif
#include <CGAL/Dimension.h> #include <CGAL/Dimension.h>
@ -46,7 +46,7 @@ template < typename InputIterator,
typename Object, typename Object,
typename Kernel, typename Kernel,
typename Tag, typename Tag,
typename Vcm_traits > typename Diagonalize_traits >
inline inline
typename Kernel::FT typename Kernel::FT
linear_least_squares_fitting_3(InputIterator first, linear_least_squares_fitting_3(InputIterator first,
@ -55,16 +55,16 @@ linear_least_squares_fitting_3(InputIterator first,
typename Kernel::Point_3& centroid, typename Kernel::Point_3& centroid,
const Tag& tag, // dimension tag, ranges from 0 to 3 const Tag& tag, // dimension tag, ranges from 0 to 3
const Kernel& kernel, const Kernel& kernel,
const Vcm_traits vcm_traits) const Diagonalize_traits diagonalize_traits)
{ {
typedef typename std::iterator_traits<InputIterator>::value_type Value_type; typedef typename std::iterator_traits<InputIterator>::value_type Value_type;
return internal::linear_least_squares_fitting_3(first, beyond, object, return internal::linear_least_squares_fitting_3(first, beyond, object,
centroid, (Value_type*) NULL, kernel, tag, centroid, (Value_type*) NULL, kernel, tag,
vcm_traits); diagonalize_traits);
} }
// deduces kernel from value type of input iterator // deduces kernel from value type of input iterator
// use default Vcm_traits // use default Diagonalize_traits
template < typename InputIterator, template < typename InputIterator,
typename Object, typename Object,
typename Point, typename Point,
@ -81,16 +81,16 @@ linear_least_squares_fitting_3(InputIterator first,
typedef typename Kernel_traits<Value_type>::Kernel Kernel; typedef typename Kernel_traits<Value_type>::Kernel Kernel;
return CGAL::linear_least_squares_fitting_3(first,beyond,object,centroid,tag,Kernel(), return CGAL::linear_least_squares_fitting_3(first,beyond,object,centroid,tag,Kernel(),
#ifdef CGAL_EIGEN3_ENABLED #ifdef CGAL_EIGEN3_ENABLED
Eigen_vcm_traits<typename Kernel::FT, 3>() Eigen_diagonalize_traits<typename Kernel::FT, 3>()
#else #else
Internal_vcm_traits<typename Kernel::FT, 3>() Internal_diagonalize_traits<typename Kernel::FT, 3>()
#endif #endif
); );
} }
// deduces kernel and does not write centroid // deduces kernel and does not write centroid
// use default Vcm_traits // use default Diagonalize_traits
template < typename InputIterator, template < typename InputIterator,
typename Object, typename Object,
typename Tag> typename Tag>
@ -106,9 +106,9 @@ linear_least_squares_fitting_3(InputIterator first,
typename Kernel::Point_3 centroid; // not used by caller typename Kernel::Point_3 centroid; // not used by caller
return CGAL::linear_least_squares_fitting_3(first,beyond,object,centroid,tag,Kernel(), return CGAL::linear_least_squares_fitting_3(first,beyond,object,centroid,tag,Kernel(),
#ifdef CGAL_EIGEN3_ENABLED #ifdef CGAL_EIGEN3_ENABLED
Eigen_vcm_traits<typename Kernel::FT, 3>() Eigen_diagonalize_traits<typename Kernel::FT, 3>()
#else #else
Internal_vcm_traits<typename Kernel::FT, 3>() Internal_diagonalize_traits<typename Kernel::FT, 3>()
#endif #endif
); );

View File

@ -36,7 +36,7 @@ namespace internal {
// fits a plane to a 3D cuboid set // fits a plane to a 3D cuboid set
template < typename InputIterator, template < typename InputIterator,
typename K, typename K,
typename Vcm_traits > typename Diagonalize_traits >
typename K::FT typename K::FT
linear_least_squares_fitting_3(InputIterator first, linear_least_squares_fitting_3(InputIterator first,
InputIterator beyond, InputIterator beyond,
@ -45,7 +45,7 @@ linear_least_squares_fitting_3(InputIterator first,
const typename K::Iso_cuboid_3*, // used for indirection const typename K::Iso_cuboid_3*, // used for indirection
const K& k, // kernel const K& k, // kernel
const CGAL::Dimension_tag<3>& tag, const CGAL::Dimension_tag<3>& tag,
const Vcm_traits& vcm_traits) const Diagonalize_traits& diagonalize_traits)
{ {
typedef typename K::FT FT; typedef typename K::FT FT;
typedef typename K::Iso_cuboid_3 Iso_cuboid; typedef typename K::Iso_cuboid_3 Iso_cuboid;
@ -61,7 +61,7 @@ linear_least_squares_fitting_3(InputIterator first,
assemble_covariance_matrix_3(first,beyond,covariance,c,k,(Iso_cuboid*) NULL,tag); assemble_covariance_matrix_3(first,beyond,covariance,c,k,(Iso_cuboid*) NULL,tag);
// compute fitting plane // compute fitting plane
return fitting_plane_3(covariance,c,plane,k,vcm_traits); return fitting_plane_3(covariance,c,plane,k,diagonalize_traits);
} // end linear_least_squares_fitting_cuboids_3 } // end linear_least_squares_fitting_cuboids_3
@ -69,7 +69,7 @@ linear_least_squares_fitting_3(InputIterator first,
// fits a plane to a 3D cuboid set // fits a plane to a 3D cuboid set
template < typename InputIterator, template < typename InputIterator,
typename K, typename K,
typename Vcm_traits > typename Diagonalize_traits >
typename K::FT typename K::FT
linear_least_squares_fitting_3(InputIterator first, linear_least_squares_fitting_3(InputIterator first,
InputIterator beyond, InputIterator beyond,
@ -78,7 +78,7 @@ linear_least_squares_fitting_3(InputIterator first,
const typename K::Iso_cuboid_3*, // used for indirection const typename K::Iso_cuboid_3*, // used for indirection
const K& k, // kernel const K& k, // kernel
const CGAL::Dimension_tag<2>& tag, const CGAL::Dimension_tag<2>& tag,
const Vcm_traits& vcm_traits) const Diagonalize_traits& diagonalize_traits)
{ {
typedef typename K::FT FT; typedef typename K::FT FT;
typedef typename K::Iso_cuboid_3 Iso_cuboid; typedef typename K::Iso_cuboid_3 Iso_cuboid;
@ -94,7 +94,7 @@ linear_least_squares_fitting_3(InputIterator first,
assemble_covariance_matrix_3(first,beyond,covariance,c,k,(Iso_cuboid*) NULL,tag); assemble_covariance_matrix_3(first,beyond,covariance,c,k,(Iso_cuboid*) NULL,tag);
// compute fitting plane // compute fitting plane
return fitting_plane_3(covariance,c,plane,k,vcm_traits); return fitting_plane_3(covariance,c,plane,k,diagonalize_traits);
} // end linear_least_squares_fitting_cuboids_3 } // end linear_least_squares_fitting_cuboids_3
@ -102,7 +102,7 @@ linear_least_squares_fitting_3(InputIterator first,
// fits a plane to a 3D cuboid set // fits a plane to a 3D cuboid set
template < typename InputIterator, template < typename InputIterator,
typename K, typename K,
typename Vcm_traits > typename Diagonalize_traits >
typename K::FT typename K::FT
linear_least_squares_fitting_3(InputIterator first, linear_least_squares_fitting_3(InputIterator first,
InputIterator beyond, InputIterator beyond,
@ -111,7 +111,7 @@ linear_least_squares_fitting_3(InputIterator first,
const typename K::Iso_cuboid_3*, // used for indirection const typename K::Iso_cuboid_3*, // used for indirection
const K& k, // kernel const K& k, // kernel
const CGAL::Dimension_tag<1>& tag, const CGAL::Dimension_tag<1>& tag,
const Vcm_traits& vcm_traits) const Diagonalize_traits& diagonalize_traits)
{ {
typedef typename K::Segment_3 Segment; typedef typename K::Segment_3 Segment;
typedef typename K::Iso_cuboid_3 Iso_cuboid; typedef typename K::Iso_cuboid_3 Iso_cuboid;
@ -141,14 +141,14 @@ linear_least_squares_fitting_3(InputIterator first,
// compute fitting plane // compute fitting plane
return linear_least_squares_fitting_3(segments.begin(),segments.end(),plane,c,(Segment*)NULL,k,tag, return linear_least_squares_fitting_3(segments.begin(),segments.end(),plane,c,(Segment*)NULL,k,tag,
vcm_traits); diagonalize_traits);
} // end linear_least_squares_fitting_cuboids_3 } // end linear_least_squares_fitting_cuboids_3
// fits a plane to a 3D cuboid set // fits a plane to a 3D cuboid set
template < typename InputIterator, template < typename InputIterator,
typename K, typename K,
typename Vcm_traits > typename Diagonalize_traits >
typename K::FT typename K::FT
linear_least_squares_fitting_3(InputIterator first, linear_least_squares_fitting_3(InputIterator first,
InputIterator beyond, InputIterator beyond,
@ -157,7 +157,7 @@ linear_least_squares_fitting_3(InputIterator first,
const typename K::Iso_cuboid_3*, // used for indirection const typename K::Iso_cuboid_3*, // used for indirection
const K& k, // kernel const K& k, // kernel
const CGAL::Dimension_tag<0>& tag, const CGAL::Dimension_tag<0>& tag,
const Vcm_traits& vcm_traits) const Diagonalize_traits& diagonalize_traits)
{ {
typedef typename K::Point_3 Point; typedef typename K::Point_3 Point;
typedef typename K::Iso_cuboid_3 Iso_cuboid; typedef typename K::Iso_cuboid_3 Iso_cuboid;
@ -183,14 +183,14 @@ linear_least_squares_fitting_3(InputIterator first,
// compute fitting plane // compute fitting plane
return linear_least_squares_fitting_3(points.begin(),points.end(),plane,c,(Point*)NULL,k,tag, return linear_least_squares_fitting_3(points.begin(),points.end(),plane,c,(Point*)NULL,k,tag,
vcm_traits); diagonalize_traits);
} // end linear_least_squares_fitting_cuboids_3 } // end linear_least_squares_fitting_cuboids_3
// fits a line to a 3D cuboid set // fits a line to a 3D cuboid set
template < typename InputIterator, template < typename InputIterator,
typename K, typename K,
typename Vcm_traits > typename Diagonalize_traits >
typename K::FT typename K::FT
linear_least_squares_fitting_3(InputIterator first, linear_least_squares_fitting_3(InputIterator first,
InputIterator beyond, InputIterator beyond,
@ -199,7 +199,7 @@ linear_least_squares_fitting_3(InputIterator first,
const typename K::Iso_cuboid_3*, // used for indirection const typename K::Iso_cuboid_3*, // used for indirection
const K& k, // kernel const K& k, // kernel
const CGAL::Dimension_tag<3>& tag, const CGAL::Dimension_tag<3>& tag,
const Vcm_traits& vcm_traits) const Diagonalize_traits& diagonalize_traits)
{ {
typedef typename K::FT FT; typedef typename K::FT FT;
typedef typename K::Iso_cuboid_3 Iso_cuboid; typedef typename K::Iso_cuboid_3 Iso_cuboid;
@ -215,14 +215,14 @@ linear_least_squares_fitting_3(InputIterator first,
assemble_covariance_matrix_3(first,beyond,covariance,c,k,(Iso_cuboid*) NULL,tag); assemble_covariance_matrix_3(first,beyond,covariance,c,k,(Iso_cuboid*) NULL,tag);
// compute fitting line // compute fitting line
return fitting_line_3(covariance,c,line,k,vcm_traits); return fitting_line_3(covariance,c,line,k,diagonalize_traits);
} // end linear_least_squares_fitting_cuboids_3 } // end linear_least_squares_fitting_cuboids_3
// fits a line to a 3D cuboid set // fits a line to a 3D cuboid set
template < typename InputIterator, template < typename InputIterator,
typename K, typename K,
typename Vcm_traits > typename Diagonalize_traits >
typename K::FT typename K::FT
linear_least_squares_fitting_3(InputIterator first, linear_least_squares_fitting_3(InputIterator first,
InputIterator beyond, InputIterator beyond,
@ -231,7 +231,7 @@ linear_least_squares_fitting_3(InputIterator first,
const typename K::Iso_cuboid_3*, // used for indirection const typename K::Iso_cuboid_3*, // used for indirection
const K& k, // kernel const K& k, // kernel
const CGAL::Dimension_tag<2>& tag, const CGAL::Dimension_tag<2>& tag,
const Vcm_traits& vcm_traits) const Diagonalize_traits& diagonalize_traits)
{ {
typedef typename K::FT FT; typedef typename K::FT FT;
typedef typename K::Iso_cuboid_3 Iso_cuboid; typedef typename K::Iso_cuboid_3 Iso_cuboid;
@ -247,7 +247,7 @@ linear_least_squares_fitting_3(InputIterator first,
assemble_covariance_matrix_3(first,beyond,covariance,c,k,(Iso_cuboid*) NULL,tag); assemble_covariance_matrix_3(first,beyond,covariance,c,k,(Iso_cuboid*) NULL,tag);
// compute fitting line // compute fitting line
return fitting_line_3(covariance,c,line,k,vcm_traits); return fitting_line_3(covariance,c,line,k,diagonalize_traits);
} // end linear_least_squares_fitting_cuboids_3 } // end linear_least_squares_fitting_cuboids_3
@ -255,7 +255,7 @@ linear_least_squares_fitting_3(InputIterator first,
// fits a line to a 3D cuboid set // fits a line to a 3D cuboid set
template < typename InputIterator, template < typename InputIterator,
typename K, typename K,
typename Vcm_traits > typename Diagonalize_traits >
typename K::FT typename K::FT
linear_least_squares_fitting_3(InputIterator first, linear_least_squares_fitting_3(InputIterator first,
InputIterator beyond, InputIterator beyond,
@ -264,7 +264,7 @@ linear_least_squares_fitting_3(InputIterator first,
const typename K::Iso_cuboid_3*, // used for indirection const typename K::Iso_cuboid_3*, // used for indirection
const K& k, // kernel const K& k, // kernel
const CGAL::Dimension_tag<1>& tag, const CGAL::Dimension_tag<1>& tag,
const Vcm_traits& vcm_traits) const Diagonalize_traits& diagonalize_traits)
{ {
typedef typename K::Segment_3 Segment; typedef typename K::Segment_3 Segment;
typedef typename K::Iso_cuboid_3 Iso_cuboid; typedef typename K::Iso_cuboid_3 Iso_cuboid;
@ -294,14 +294,14 @@ linear_least_squares_fitting_3(InputIterator first,
// compute fitting line // compute fitting line
return linear_least_squares_fitting_3(segments.begin(),segments.end(),line,c,(Segment*)NULL,k,tag, return linear_least_squares_fitting_3(segments.begin(),segments.end(),line,c,(Segment*)NULL,k,tag,
vcm_traits); diagonalize_traits);
} // end linear_least_squares_fitting_cuboids_3 } // end linear_least_squares_fitting_cuboids_3
// fits a line to a 3D cuboid set // fits a line to a 3D cuboid set
template < typename InputIterator, template < typename InputIterator,
typename K, typename K,
typename Vcm_traits > typename Diagonalize_traits >
typename K::FT typename K::FT
linear_least_squares_fitting_3(InputIterator first, linear_least_squares_fitting_3(InputIterator first,
InputIterator beyond, InputIterator beyond,
@ -310,7 +310,7 @@ linear_least_squares_fitting_3(InputIterator first,
const typename K::Iso_cuboid_3*, // used for indirection const typename K::Iso_cuboid_3*, // used for indirection
const K& k, // kernel const K& k, // kernel
const CGAL::Dimension_tag<0>& tag, const CGAL::Dimension_tag<0>& tag,
const Vcm_traits& vcm_traits) const Diagonalize_traits& diagonalize_traits)
{ {
typedef typename K::Point_3 Point; typedef typename K::Point_3 Point;
typedef typename K::Iso_cuboid_3 Iso_cuboid; typedef typename K::Iso_cuboid_3 Iso_cuboid;
@ -336,7 +336,7 @@ linear_least_squares_fitting_3(InputIterator first,
// compute fitting line // compute fitting line
return linear_least_squares_fitting_3(points.begin(),points.end(),line,c,(Point*)NULL,k,tag, return linear_least_squares_fitting_3(points.begin(),points.end(),line,c,(Point*)NULL,k,tag,
vcm_traits); diagonalize_traits);
} // end linear_least_squares_fitting_cuboids_3 } // end linear_least_squares_fitting_cuboids_3

View File

@ -23,10 +23,10 @@
#include <CGAL/basic.h> #include <CGAL/basic.h>
#include <CGAL/centroid.h> #include <CGAL/centroid.h>
#include <CGAL/eigen_2.h> #include <CGAL/eigen_2.h>
#include <CGAL/Internal_vcm_traits.h> #include <CGAL/Internal_diagonalize_traits.h>
#ifdef CGAL_EIGEN3_ENABLED #ifdef CGAL_EIGEN3_ENABLED
#include <CGAL/Eigen_vcm_traits.h> #include <CGAL/Eigen_diagonalize_traits.h>
#endif #endif
#include <iterator> #include <iterator>
@ -43,7 +43,7 @@ namespace internal {
// direction by default). // direction by default).
template < typename InputIterator, template < typename InputIterator,
typename K, typename K,
typename Vcm_traits> typename Diagonalize_traits>
typename K::FT typename K::FT
linear_least_squares_fitting_2(InputIterator first, linear_least_squares_fitting_2(InputIterator first,
InputIterator beyond, InputIterator beyond,
@ -52,7 +52,7 @@ linear_least_squares_fitting_2(InputIterator first,
const typename K::Point_2*,// used for indirection const typename K::Point_2*,// used for indirection
const K&, // kernel const K&, // kernel
const CGAL::Dimension_tag<0>& tag, const CGAL::Dimension_tag<0>& tag,
const Vcm_traits&) const Diagonalize_traits&)
{ {
// types // types
typedef typename K::FT FT; typedef typename K::FT FT;
@ -91,7 +91,7 @@ linear_least_squares_fitting_2(InputIterator first,
// eigen vectors are sorted in accordance. // eigen vectors are sorted in accordance.
CGAL::cpp11::array<FT, 2> eigen_values = {{ 0. , 0. }}; CGAL::cpp11::array<FT, 2> eigen_values = {{ 0. , 0. }};
CGAL::cpp11::array<FT, 4> eigen_vectors = {{ 0., 0., 0. }}; CGAL::cpp11::array<FT, 4> eigen_vectors = {{ 0., 0., 0. }};
Vcm_traits::diagonalize_selfadjoint_covariance_matrix Diagonalize_traits::diagonalize_selfadjoint_covariance_matrix
(covariance, eigen_values, eigen_vectors); (covariance, eigen_values, eigen_vectors);
// check unicity and build fitting line accordingly // check unicity and build fitting line accordingly

View File

@ -35,7 +35,7 @@ namespace internal {
// 0 is worst (isotropic case, returns a plane with default direction) // 0 is worst (isotropic case, returns a plane with default direction)
template < typename InputIterator, template < typename InputIterator,
typename K, typename K,
typename Vcm_traits > typename Diagonalize_traits >
typename K::FT typename K::FT
linear_least_squares_fitting_3(InputIterator first, linear_least_squares_fitting_3(InputIterator first,
InputIterator beyond, InputIterator beyond,
@ -44,7 +44,7 @@ linear_least_squares_fitting_3(InputIterator first,
const typename K::Point_3*, // used for indirection const typename K::Point_3*, // used for indirection
const K& k, // kernel const K& k, // kernel
const CGAL::Dimension_tag<0>& tag, const CGAL::Dimension_tag<0>& tag,
const Vcm_traits& vcm_traits) const Diagonalize_traits& diagonalize_traits)
{ {
typedef typename K::FT FT; typedef typename K::FT FT;
typedef typename K::Point_3 Point; typedef typename K::Point_3 Point;
@ -60,7 +60,7 @@ linear_least_squares_fitting_3(InputIterator first,
assemble_covariance_matrix_3(first,beyond,covariance,c,k,(Point*) NULL,tag); assemble_covariance_matrix_3(first,beyond,covariance,c,k,(Point*) NULL,tag);
// compute fitting plane // compute fitting plane
return fitting_plane_3(covariance,c,plane,k,vcm_traits); return fitting_plane_3(covariance,c,plane,k,diagonalize_traits);
} // end fit plane to point set } // end fit plane to point set
// fits a line to a 3D point set // fits a line to a 3D point set
@ -69,7 +69,7 @@ linear_least_squares_fitting_3(InputIterator first,
// 0 is worst (isotropic case, returns a line along x axis) // 0 is worst (isotropic case, returns a line along x axis)
template < typename InputIterator, template < typename InputIterator,
typename K, typename K,
typename Vcm_traits > typename Diagonalize_traits >
typename K::FT typename K::FT
linear_least_squares_fitting_3(InputIterator first, linear_least_squares_fitting_3(InputIterator first,
InputIterator beyond, InputIterator beyond,
@ -78,7 +78,7 @@ linear_least_squares_fitting_3(InputIterator first,
const typename K::Point_3*, // used for indirection const typename K::Point_3*, // used for indirection
const K& k, // kernel const K& k, // kernel
const CGAL::Dimension_tag<0>& tag, const CGAL::Dimension_tag<0>& tag,
const Vcm_traits& vcm_traits) const Diagonalize_traits& diagonalize_traits)
{ {
typedef typename K::FT FT; typedef typename K::FT FT;
typedef typename K::Point_3 Point; typedef typename K::Point_3 Point;
@ -94,7 +94,7 @@ linear_least_squares_fitting_3(InputIterator first,
assemble_covariance_matrix_3(first,beyond,covariance,c,k,(Point*) NULL,tag); assemble_covariance_matrix_3(first,beyond,covariance,c,k,(Point*) NULL,tag);
// compute fitting line // compute fitting line
return fitting_line_3(covariance,c,line,k,vcm_traits); return fitting_line_3(covariance,c,line,k,diagonalize_traits);
} // end fit line to point set } // end fit line to point set
} // end namespace internal } // end namespace internal

View File

@ -38,7 +38,7 @@ namespace internal {
// 0 is worst (isotropic case, returns a line with horizontal // 0 is worst (isotropic case, returns a line with horizontal
// direction by default) // direction by default)
template < typename InputIterator, typename K, typename Vcm_traits > template < typename InputIterator, typename K, typename Diagonalize_traits >
typename K::FT typename K::FT
linear_least_squares_fitting_2(InputIterator first, linear_least_squares_fitting_2(InputIterator first,
InputIterator beyond, InputIterator beyond,
@ -47,7 +47,7 @@ linear_least_squares_fitting_2(InputIterator first,
const typename K::Iso_rectangle_2*,// used for indirection const typename K::Iso_rectangle_2*,// used for indirection
const K&, // kernel const K&, // kernel
const CGAL::Dimension_tag<2>& tag, const CGAL::Dimension_tag<2>& tag,
const Vcm_traits&) const Diagonalize_traits&)
{ {
// types // types
typedef typename K::FT FT; typedef typename K::FT FT;
@ -128,7 +128,7 @@ linear_least_squares_fitting_2(InputIterator first,
std::pair<Vector,Vector> eigen_vectors; std::pair<Vector,Vector> eigen_vectors;
CGAL::cpp11::array<FT, 2> eigen_values1 = {{ 0. , 0. }}; CGAL::cpp11::array<FT, 2> eigen_values1 = {{ 0. , 0. }};
CGAL::cpp11::array<FT, 4> eigen_vectors1 = {{ 0., 0., 0. }}; CGAL::cpp11::array<FT, 4> eigen_vectors1 = {{ 0., 0., 0. }};
Vcm_traits::diagonalize_selfadjoint_covariance_matrix Diagonalize_traits::diagonalize_selfadjoint_covariance_matrix
(covariance, eigen_values1, eigen_vectors1); (covariance, eigen_values1, eigen_vectors1);
eigen_values = std::make_pair(eigen_values1[1],eigen_values1[0]); eigen_values = std::make_pair(eigen_values1[1],eigen_values1[0]);
@ -151,7 +151,7 @@ linear_least_squares_fitting_2(InputIterator first,
} }
} // end linear_least_squares_fitting_2 for rectangle set with 2D tag } // end linear_least_squares_fitting_2 for rectangle set with 2D tag
template < typename InputIterator, typename K, typename Vcm_traits > template < typename InputIterator, typename K, typename Diagonalize_traits >
typename K::FT typename K::FT
linear_least_squares_fitting_2(InputIterator first, linear_least_squares_fitting_2(InputIterator first,
InputIterator beyond, InputIterator beyond,
@ -160,7 +160,7 @@ linear_least_squares_fitting_2(InputIterator first,
const typename K::Iso_rectangle_2*,// used for indirection const typename K::Iso_rectangle_2*,// used for indirection
const K&, // kernel const K&, // kernel
const CGAL::Dimension_tag<1>& tag, const CGAL::Dimension_tag<1>& tag,
const Vcm_traits& vcm_traits) const Diagonalize_traits& diagonalize_traits)
{ {
// types // types
typedef typename K::Iso_rectangle_2 Iso_rectangle; typedef typename K::Iso_rectangle_2 Iso_rectangle;
@ -182,14 +182,14 @@ linear_least_squares_fitting_2(InputIterator first,
} }
return linear_least_squares_fitting_2(segments.begin(),segments.end(),line,c,K(),tag, return linear_least_squares_fitting_2(segments.begin(),segments.end(),line,c,K(),tag,
vcm_traits); diagonalize_traits);
} // end linear_least_squares_fitting_2 for rectangle set with 1D tag } // end linear_least_squares_fitting_2 for rectangle set with 1D tag
template < typename InputIterator, template < typename InputIterator,
typename K, typename K,
typename Vcm_traits > typename Diagonalize_traits >
typename K::FT typename K::FT
linear_least_squares_fitting_2(InputIterator first, linear_least_squares_fitting_2(InputIterator first,
InputIterator beyond, InputIterator beyond,
@ -198,7 +198,7 @@ linear_least_squares_fitting_2(InputIterator first,
const typename K::Iso_rectangle_2*,// used for indirection const typename K::Iso_rectangle_2*,// used for indirection
const K&, // kernel const K&, // kernel
const CGAL::Dimension_tag<0>& tag, const CGAL::Dimension_tag<0>& tag,
const Vcm_traits& vcm_traits) const Diagonalize_traits& diagonalize_traits)
{ {
// types // types
typedef typename K::Iso_rectangle_2 Iso_rectangle; typedef typename K::Iso_rectangle_2 Iso_rectangle;
@ -220,7 +220,7 @@ linear_least_squares_fitting_2(InputIterator first,
} }
return linear_least_squares_fitting_2(points.begin(),points.end(),line,c,K(),tag, return linear_least_squares_fitting_2(points.begin(),points.end(),line,c,K(),tag,
vcm_traits); diagonalize_traits);
} // end linear_least_squares_fitting_2 for rectangle set with 0D tag } // end linear_least_squares_fitting_2 for rectangle set with 0D tag

View File

@ -38,7 +38,7 @@ namespace internal {
// 0 is worst (isotropic case, returns a line with horizontal // 0 is worst (isotropic case, returns a line with horizontal
// direction by default) // direction by default)
template < typename InputIterator, typename K, typename Vcm_traits > template < typename InputIterator, typename K, typename Diagonalize_traits >
typename K::FT typename K::FT
linear_least_squares_fitting_2(InputIterator first, linear_least_squares_fitting_2(InputIterator first,
InputIterator beyond, InputIterator beyond,
@ -47,7 +47,7 @@ linear_least_squares_fitting_2(InputIterator first,
const typename K::Segment_2*,// used for indirection const typename K::Segment_2*,// used for indirection
const K&, // kernel const K&, // kernel
const CGAL::Dimension_tag<1>& tag, const CGAL::Dimension_tag<1>& tag,
const Vcm_traits&) const Diagonalize_traits&)
{ {
// types // types
typedef typename K::FT FT; typedef typename K::FT FT;
@ -116,7 +116,7 @@ linear_least_squares_fitting_2(InputIterator first,
std::pair<Vector,Vector> eigen_vectors; std::pair<Vector,Vector> eigen_vectors;
CGAL::cpp11::array<FT, 2> eigen_values1 = {{ 0. , 0. }}; CGAL::cpp11::array<FT, 2> eigen_values1 = {{ 0. , 0. }};
CGAL::cpp11::array<FT, 4> eigen_vectors1 = {{ 0., 0., 0. }}; CGAL::cpp11::array<FT, 4> eigen_vectors1 = {{ 0., 0., 0. }};
Vcm_traits::diagonalize_selfadjoint_covariance_matrix Diagonalize_traits::diagonalize_selfadjoint_covariance_matrix
(covariance, eigen_values1, eigen_vectors1); (covariance, eigen_values1, eigen_vectors1);
eigen_values = std::make_pair(eigen_values1[1],eigen_values1[0]); eigen_values = std::make_pair(eigen_values1[1],eigen_values1[0]);
@ -138,7 +138,7 @@ linear_least_squares_fitting_2(InputIterator first,
} }
} // end linear_least_squares_fitting_2 for segment set with 1D tag } // end linear_least_squares_fitting_2 for segment set with 1D tag
template < typename InputIterator, typename K, typename Vcm_traits > template < typename InputIterator, typename K, typename Diagonalize_traits >
typename K::FT typename K::FT
linear_least_squares_fitting_2(InputIterator first, linear_least_squares_fitting_2(InputIterator first,
InputIterator beyond, InputIterator beyond,
@ -147,7 +147,7 @@ linear_least_squares_fitting_2(InputIterator first,
const typename K::Segment_2*,// used for indirection const typename K::Segment_2*,// used for indirection
const K& k, // kernel const K& k, // kernel
const CGAL::Dimension_tag<0>& tag, const CGAL::Dimension_tag<0>& tag,
const Vcm_traits& vcm_traits) const Diagonalize_traits& diagonalize_traits)
{ {
// types // types
typedef typename K::Point_2 Point; typedef typename K::Point_2 Point;
@ -166,7 +166,7 @@ linear_least_squares_fitting_2(InputIterator first,
points.push_back(s[1]); points.push_back(s[1]);
} }
return linear_least_squares_fitting_2(points.begin(),points.end(),line,c,k,(Point*)NULL,tag, return linear_least_squares_fitting_2(points.begin(),points.end(),line,c,k,(Point*)NULL,tag,
vcm_traits); diagonalize_traits);
} // end linear_least_squares_fitting_2 for segment set with 1D tag } // end linear_least_squares_fitting_2 for segment set with 1D tag

View File

@ -35,7 +35,7 @@ namespace internal {
// fits a plane to a 3D segment set // fits a plane to a 3D segment set
template < typename InputIterator, template < typename InputIterator,
typename K, typename K,
typename Vcm_traits > typename Diagonalize_traits >
typename K::FT typename K::FT
linear_least_squares_fitting_3(InputIterator first, linear_least_squares_fitting_3(InputIterator first,
InputIterator beyond, InputIterator beyond,
@ -44,7 +44,7 @@ linear_least_squares_fitting_3(InputIterator first,
const typename K::Segment_3*, // used for indirection const typename K::Segment_3*, // used for indirection
const K& k, // kernel const K& k, // kernel
const CGAL::Dimension_tag<1>& tag, const CGAL::Dimension_tag<1>& tag,
const Vcm_traits& vcm_traits) const Diagonalize_traits& diagonalize_traits)
{ {
typedef typename K::FT FT; typedef typename K::FT FT;
typedef typename K::Segment_3 Segment; typedef typename K::Segment_3 Segment;
@ -60,14 +60,14 @@ linear_least_squares_fitting_3(InputIterator first,
assemble_covariance_matrix_3(first,beyond,covariance,c,k,(Segment*) NULL,tag); assemble_covariance_matrix_3(first,beyond,covariance,c,k,(Segment*) NULL,tag);
// compute fitting plane // compute fitting plane
return fitting_plane_3(covariance,c,plane,k,vcm_traits); return fitting_plane_3(covariance,c,plane,k,diagonalize_traits);
} // end linear_least_squares_fitting_segments_3 } // end linear_least_squares_fitting_segments_3
// fits a plane to a 3D segment set // fits a plane to a 3D segment set
template < typename InputIterator, template < typename InputIterator,
typename K, typename K,
typename Vcm_traits > typename Diagonalize_traits >
typename K::FT typename K::FT
linear_least_squares_fitting_3(InputIterator first, linear_least_squares_fitting_3(InputIterator first,
InputIterator beyond, InputIterator beyond,
@ -76,7 +76,7 @@ linear_least_squares_fitting_3(InputIterator first,
const typename K::Segment_3*, // used for indirection const typename K::Segment_3*, // used for indirection
const K& k, // kernel const K& k, // kernel
const CGAL::Dimension_tag<0>& tag, const CGAL::Dimension_tag<0>& tag,
const Vcm_traits& vcm_traits) const Diagonalize_traits& diagonalize_traits)
{ {
typedef typename K::Segment_3 Segment; typedef typename K::Segment_3 Segment;
typedef typename K::Point_3 Point; typedef typename K::Point_3 Point;
@ -96,14 +96,14 @@ linear_least_squares_fitting_3(InputIterator first,
// compute fitting plane // compute fitting plane
return linear_least_squares_fitting_3(points.begin(),points.end(),plane,c,(Point*)NULL,k,tag, return linear_least_squares_fitting_3(points.begin(),points.end(),plane,c,(Point*)NULL,k,tag,
vcm_traits); diagonalize_traits);
} // end linear_least_squares_fitting_segments_3 } // end linear_least_squares_fitting_segments_3
// fits a line to a 3D segment set // fits a line to a 3D segment set
template < typename InputIterator, template < typename InputIterator,
typename K, typename K,
typename Vcm_traits > typename Diagonalize_traits >
typename K::FT typename K::FT
linear_least_squares_fitting_3(InputIterator first, linear_least_squares_fitting_3(InputIterator first,
InputIterator beyond, InputIterator beyond,
@ -112,7 +112,7 @@ linear_least_squares_fitting_3(InputIterator first,
const typename K::Segment_3*, // used for indirection const typename K::Segment_3*, // used for indirection
const K& k, // kernel const K& k, // kernel
const CGAL::Dimension_tag<1>& tag, const CGAL::Dimension_tag<1>& tag,
const Vcm_traits& vcm_traits) const Diagonalize_traits& diagonalize_traits)
{ {
typedef typename K::FT FT; typedef typename K::FT FT;
typedef typename K::Segment_3 Segment; typedef typename K::Segment_3 Segment;
@ -128,14 +128,14 @@ linear_least_squares_fitting_3(InputIterator first,
assemble_covariance_matrix_3(first,beyond,covariance,c,k,(Segment*) NULL,tag); assemble_covariance_matrix_3(first,beyond,covariance,c,k,(Segment*) NULL,tag);
// compute fitting line // compute fitting line
return fitting_line_3(covariance,c,line,k,vcm_traits); return fitting_line_3(covariance,c,line,k,diagonalize_traits);
} // end linear_least_squares_fitting_segments_3 } // end linear_least_squares_fitting_segments_3
// fits a plane to a 3D segment set // fits a plane to a 3D segment set
template < typename InputIterator, template < typename InputIterator,
typename K, typename K,
typename Vcm_traits > typename Diagonalize_traits >
typename K::FT typename K::FT
linear_least_squares_fitting_3(InputIterator first, linear_least_squares_fitting_3(InputIterator first,
InputIterator beyond, InputIterator beyond,
@ -144,7 +144,7 @@ linear_least_squares_fitting_3(InputIterator first,
const typename K::Segment_3*, // used for indirection const typename K::Segment_3*, // used for indirection
const K& k, // kernel const K& k, // kernel
const CGAL::Dimension_tag<0>& tag, const CGAL::Dimension_tag<0>& tag,
const Vcm_traits& vcm_traits) const Diagonalize_traits& diagonalize_traits)
{ {
typedef typename K::Segment_3 Segment; typedef typename K::Segment_3 Segment;
typedef typename K::Point_3 Point; typedef typename K::Point_3 Point;
@ -164,7 +164,7 @@ linear_least_squares_fitting_3(InputIterator first,
// compute fitting plane // compute fitting plane
return linear_least_squares_fitting_3(points.begin(),points.end(),line,c,(Point*)NULL,k,tag, return linear_least_squares_fitting_3(points.begin(),points.end(),line,c,(Point*)NULL,k,tag,
vcm_traits); diagonalize_traits);
} // end linear_least_squares_fitting_segments_3 } // end linear_least_squares_fitting_segments_3

View File

@ -33,7 +33,7 @@ namespace internal {
// fits a plane to a set of 3D balls (3D) // fits a plane to a set of 3D balls (3D)
template < typename InputIterator, template < typename InputIterator,
typename K, typename K,
typename Vcm_traits > typename Diagonalize_traits >
typename K::FT typename K::FT
linear_least_squares_fitting_3(InputIterator first, linear_least_squares_fitting_3(InputIterator first,
InputIterator beyond, InputIterator beyond,
@ -42,7 +42,7 @@ linear_least_squares_fitting_3(InputIterator first,
const typename K::Sphere_3*, // used for indirection const typename K::Sphere_3*, // used for indirection
const K& k, // kernel const K& k, // kernel
const CGAL::Dimension_tag<3>& tag, const CGAL::Dimension_tag<3>& tag,
const Vcm_traits& vcm_traits) const Diagonalize_traits& diagonalize_traits)
{ {
typedef typename K::FT FT; typedef typename K::FT FT;
typedef typename K::Sphere_3 Sphere; typedef typename K::Sphere_3 Sphere;
@ -58,14 +58,14 @@ linear_least_squares_fitting_3(InputIterator first,
assemble_covariance_matrix_3(first,beyond,covariance,c,k,(Sphere*) NULL,tag); assemble_covariance_matrix_3(first,beyond,covariance,c,k,(Sphere*) NULL,tag);
// compute fitting plane // compute fitting plane
return fitting_plane_3(covariance,c,plane,k,vcm_traits); return fitting_plane_3(covariance,c,plane,k,diagonalize_traits);
} // end linear_least_squares_fitting_spheres_3 } // end linear_least_squares_fitting_spheres_3
// fits a plane to a 3D sphere set // fits a plane to a 3D sphere set
template < typename InputIterator, template < typename InputIterator,
typename K, typename K,
typename Vcm_traits > typename Diagonalize_traits >
typename K::FT typename K::FT
linear_least_squares_fitting_3(InputIterator first, linear_least_squares_fitting_3(InputIterator first,
InputIterator beyond, InputIterator beyond,
@ -74,7 +74,7 @@ linear_least_squares_fitting_3(InputIterator first,
const typename K::Sphere_3*, // used for indirection const typename K::Sphere_3*, // used for indirection
const K& k, // kernel const K& k, // kernel
const CGAL::Dimension_tag<2>& tag, const CGAL::Dimension_tag<2>& tag,
const Vcm_traits& vcm_traits) const Diagonalize_traits& diagonalize_traits)
{ {
typedef typename K::FT FT; typedef typename K::FT FT;
typedef typename K::Sphere_3 Sphere; typedef typename K::Sphere_3 Sphere;
@ -90,7 +90,7 @@ linear_least_squares_fitting_3(InputIterator first,
assemble_covariance_matrix_3(first,beyond,covariance,c,k,(Sphere*) NULL,tag); assemble_covariance_matrix_3(first,beyond,covariance,c,k,(Sphere*) NULL,tag);
// compute fitting plane // compute fitting plane
return fitting_plane_3(covariance,c,plane,k,vcm_traits); return fitting_plane_3(covariance,c,plane,k,diagonalize_traits);
} // end linear_least_squares_fitting_spheres_3 } // end linear_least_squares_fitting_spheres_3
@ -98,7 +98,7 @@ linear_least_squares_fitting_3(InputIterator first,
// fits a line to a 3D ball set // fits a line to a 3D ball set
template < typename InputIterator, template < typename InputIterator,
typename K, typename K,
typename Vcm_traits > typename Diagonalize_traits >
typename K::FT typename K::FT
linear_least_squares_fitting_3(InputIterator first, linear_least_squares_fitting_3(InputIterator first,
InputIterator beyond, InputIterator beyond,
@ -107,7 +107,7 @@ linear_least_squares_fitting_3(InputIterator first,
const typename K::Sphere_3*, // used for indirection const typename K::Sphere_3*, // used for indirection
const K& k, // kernel const K& k, // kernel
const CGAL::Dimension_tag<3>& tag, const CGAL::Dimension_tag<3>& tag,
const Vcm_traits& vcm_traits) const Diagonalize_traits& diagonalize_traits)
{ {
typedef typename K::FT FT; typedef typename K::FT FT;
typedef typename K::Sphere_3 Sphere; typedef typename K::Sphere_3 Sphere;
@ -124,14 +124,14 @@ linear_least_squares_fitting_3(InputIterator first,
// compute fitting line // compute fitting line
return fitting_line_3(covariance,c,line,k,vcm_traits); return fitting_line_3(covariance,c,line,k,diagonalize_traits);
} // end linear_least_squares_fitting_spheres_3 } // end linear_least_squares_fitting_spheres_3
// fits a line to a 3D sphere set // fits a line to a 3D sphere set
template < typename InputIterator, template < typename InputIterator,
typename K, typename K,
typename Vcm_traits > typename Diagonalize_traits >
typename K::FT typename K::FT
linear_least_squares_fitting_3(InputIterator first, linear_least_squares_fitting_3(InputIterator first,
InputIterator beyond, InputIterator beyond,
@ -140,7 +140,7 @@ linear_least_squares_fitting_3(InputIterator first,
const typename K::Sphere_3*, // used for indirection const typename K::Sphere_3*, // used for indirection
const K& k, // kernel const K& k, // kernel
const CGAL::Dimension_tag<2>& tag, const CGAL::Dimension_tag<2>& tag,
const Vcm_traits& vcm_traits) const Diagonalize_traits& diagonalize_traits)
{ {
typedef typename K::FT FT; typedef typename K::FT FT;
typedef typename K::Sphere_3 Sphere; typedef typename K::Sphere_3 Sphere;
@ -156,7 +156,7 @@ linear_least_squares_fitting_3(InputIterator first,
assemble_covariance_matrix_3(first,beyond,covariance,c,k,(Sphere*) NULL,tag); assemble_covariance_matrix_3(first,beyond,covariance,c,k,(Sphere*) NULL,tag);
// compute fitting line // compute fitting line
return fitting_line_3(covariance,c,line,k,vcm_traits); return fitting_line_3(covariance,c,line,k,diagonalize_traits);
} // end linear_least_squares_fitting_spheres_3 } // end linear_least_squares_fitting_spheres_3

View File

@ -37,7 +37,7 @@ namespace internal {
// fits a plane to a 3D tetrahedron set // fits a plane to a 3D tetrahedron set
template < typename InputIterator, template < typename InputIterator,
typename K, typename K,
typename Vcm_traits > typename Diagonalize_traits >
typename K::FT typename K::FT
linear_least_squares_fitting_3(InputIterator first, linear_least_squares_fitting_3(InputIterator first,
InputIterator beyond, InputIterator beyond,
@ -46,7 +46,7 @@ linear_least_squares_fitting_3(InputIterator first,
const typename K::Tetrahedron_3*, // used for indirection const typename K::Tetrahedron_3*, // used for indirection
const K& k, // kernel const K& k, // kernel
const CGAL::Dimension_tag<3>& tag, const CGAL::Dimension_tag<3>& tag,
const Vcm_traits& vcm_traits) const Diagonalize_traits& diagonalize_traits)
{ {
typedef typename K::FT FT; typedef typename K::FT FT;
typedef typename K::Tetrahedron_3 Tetrahedron; typedef typename K::Tetrahedron_3 Tetrahedron;
@ -62,13 +62,13 @@ linear_least_squares_fitting_3(InputIterator first,
assemble_covariance_matrix_3(first,beyond,covariance,c,k,(Tetrahedron*) NULL,tag); assemble_covariance_matrix_3(first,beyond,covariance,c,k,(Tetrahedron*) NULL,tag);
// compute fitting plane // compute fitting plane
return fitting_plane_3(covariance,c,plane,k,vcm_traits); return fitting_plane_3(covariance,c,plane,k,diagonalize_traits);
} // end linear_least_squares_fitting_tetrahedrons_3 } // end linear_least_squares_fitting_tetrahedrons_3
// fits a plane to a 3D tetrahedron set // fits a plane to a 3D tetrahedron set
template < typename InputIterator, template < typename InputIterator,
typename K, typename K,
typename Vcm_traits > typename Diagonalize_traits >
typename K::FT typename K::FT
linear_least_squares_fitting_3(InputIterator first, linear_least_squares_fitting_3(InputIterator first,
InputIterator beyond, InputIterator beyond,
@ -77,7 +77,7 @@ linear_least_squares_fitting_3(InputIterator first,
const typename K::Tetrahedron_3*, // used for indirection const typename K::Tetrahedron_3*, // used for indirection
const K& k, // kernel const K& k, // kernel
const CGAL::Dimension_tag<2>& tag, const CGAL::Dimension_tag<2>& tag,
const Vcm_traits& vcm_traits) const Diagonalize_traits& diagonalize_traits)
{ {
typedef typename K::Tetrahedron_3 Tetrahedron; typedef typename K::Tetrahedron_3 Tetrahedron;
typedef typename K::Triangle_3 Triangle; typedef typename K::Triangle_3 Triangle;
@ -99,14 +99,14 @@ linear_least_squares_fitting_3(InputIterator first,
// compute fitting plane // compute fitting plane
return linear_least_squares_fitting_3(triangles.begin(),triangles.end(),plane,c,(Triangle*)NULL,k,tag, return linear_least_squares_fitting_3(triangles.begin(),triangles.end(),plane,c,(Triangle*)NULL,k,tag,
vcm_traits); diagonalize_traits);
} // end linear_least_squares_fitting_tetrahedrons_3 } // end linear_least_squares_fitting_tetrahedrons_3
// fits a plane to a 3D tetrahedron set // fits a plane to a 3D tetrahedron set
template < typename InputIterator, template < typename InputIterator,
typename K, typename K,
typename Vcm_traits > typename Diagonalize_traits >
typename K::FT typename K::FT
linear_least_squares_fitting_3(InputIterator first, linear_least_squares_fitting_3(InputIterator first,
InputIterator beyond, InputIterator beyond,
@ -115,7 +115,7 @@ linear_least_squares_fitting_3(InputIterator first,
const typename K::Tetrahedron_3*, // used for indirection const typename K::Tetrahedron_3*, // used for indirection
const K& k, // kernel const K& k, // kernel
const CGAL::Dimension_tag<1>& tag, const CGAL::Dimension_tag<1>& tag,
const Vcm_traits& vcm_traits) const Diagonalize_traits& diagonalize_traits)
{ {
typedef typename K::Tetrahedron_3 Tetrahedron; typedef typename K::Tetrahedron_3 Tetrahedron;
typedef typename K::Segment_3 Segment; typedef typename K::Segment_3 Segment;
@ -140,14 +140,14 @@ linear_least_squares_fitting_3(InputIterator first,
// compute fitting plane // compute fitting plane
return linear_least_squares_fitting_3(segments.begin(),segments.end(),plane,c,(Segment*)NULL,k,tag, return linear_least_squares_fitting_3(segments.begin(),segments.end(),plane,c,(Segment*)NULL,k,tag,
vcm_traits); diagonalize_traits);
} // end linear_least_squares_fitting_tetrahedrons_3 } // end linear_least_squares_fitting_tetrahedrons_3
// fits a plane to a 3D tetrahedron set // fits a plane to a 3D tetrahedron set
template < typename InputIterator, template < typename InputIterator,
typename K, typename K,
typename Vcm_traits > typename Diagonalize_traits >
typename K::FT typename K::FT
linear_least_squares_fitting_3(InputIterator first, linear_least_squares_fitting_3(InputIterator first,
InputIterator beyond, InputIterator beyond,
@ -156,7 +156,7 @@ linear_least_squares_fitting_3(InputIterator first,
const typename K::Tetrahedron_3*, // used for indirection const typename K::Tetrahedron_3*, // used for indirection
const K& k, // kernel const K& k, // kernel
const CGAL::Dimension_tag<0>& tag, const CGAL::Dimension_tag<0>& tag,
const Vcm_traits& vcm_traits) const Diagonalize_traits& diagonalize_traits)
{ {
typedef typename K::Tetrahedron_3 Tetrahedron; typedef typename K::Tetrahedron_3 Tetrahedron;
typedef typename K::Point_3 Point; typedef typename K::Point_3 Point;
@ -178,14 +178,14 @@ linear_least_squares_fitting_3(InputIterator first,
// compute fitting plane // compute fitting plane
return linear_least_squares_fitting_3(points.begin(),points.end(),plane,c,(Point*)NULL,k,tag, return linear_least_squares_fitting_3(points.begin(),points.end(),plane,c,(Point*)NULL,k,tag,
vcm_traits); diagonalize_traits);
} // end linear_least_squares_fitting_tetrahedrons_3 } // end linear_least_squares_fitting_tetrahedrons_3
// fits a line to a 3D tetrahedron set // fits a line to a 3D tetrahedron set
template < typename InputIterator, template < typename InputIterator,
typename K, typename K,
typename Vcm_traits > typename Diagonalize_traits >
typename K::FT typename K::FT
linear_least_squares_fitting_3(InputIterator first, linear_least_squares_fitting_3(InputIterator first,
InputIterator beyond, InputIterator beyond,
@ -194,7 +194,7 @@ linear_least_squares_fitting_3(InputIterator first,
const typename K::Tetrahedron_3*, // used for indirection const typename K::Tetrahedron_3*, // used for indirection
const K& k, // kernel const K& k, // kernel
const CGAL::Dimension_tag<3>& tag, const CGAL::Dimension_tag<3>& tag,
const Vcm_traits& vcm_traits) const Diagonalize_traits& diagonalize_traits)
{ {
typedef typename K::FT FT; typedef typename K::FT FT;
typedef typename K::Tetrahedron_3 Tetrahedron; typedef typename K::Tetrahedron_3 Tetrahedron;
@ -210,14 +210,14 @@ linear_least_squares_fitting_3(InputIterator first,
assemble_covariance_matrix_3(first,beyond,covariance,c,k,(Tetrahedron*) NULL,tag); assemble_covariance_matrix_3(first,beyond,covariance,c,k,(Tetrahedron*) NULL,tag);
// compute fitting line // compute fitting line
return fitting_line_3(covariance,c,line,k,vcm_traits); return fitting_line_3(covariance,c,line,k,diagonalize_traits);
} // end linear_least_squares_fitting_tetrahedrons_3 } // end linear_least_squares_fitting_tetrahedrons_3
// fits a line to a 3D tetrahedron set // fits a line to a 3D tetrahedron set
template < typename InputIterator, template < typename InputIterator,
typename K, typename K,
typename Vcm_traits > typename Diagonalize_traits >
typename K::FT typename K::FT
linear_least_squares_fitting_3(InputIterator first, linear_least_squares_fitting_3(InputIterator first,
InputIterator beyond, InputIterator beyond,
@ -226,7 +226,7 @@ linear_least_squares_fitting_3(InputIterator first,
const typename K::Tetrahedron_3*, // used for indirection const typename K::Tetrahedron_3*, // used for indirection
const K& k, // kernel const K& k, // kernel
const CGAL::Dimension_tag<2>& tag, const CGAL::Dimension_tag<2>& tag,
const Vcm_traits& vcm_traits) const Diagonalize_traits& diagonalize_traits)
{ {
typedef typename K::Tetrahedron_3 Tetrahedron; typedef typename K::Tetrahedron_3 Tetrahedron;
typedef typename K::Triangle_3 Triangle; typedef typename K::Triangle_3 Triangle;
@ -248,14 +248,14 @@ linear_least_squares_fitting_3(InputIterator first,
// compute fitting line // compute fitting line
return linear_least_squares_fitting_3(triangles.begin(),triangles.end(),line,c,(Triangle*)NULL,k,tag, return linear_least_squares_fitting_3(triangles.begin(),triangles.end(),line,c,(Triangle*)NULL,k,tag,
vcm_traits); diagonalize_traits);
} // end linear_least_squares_fitting_tetrahedrons_3 } // end linear_least_squares_fitting_tetrahedrons_3
// fits a line to a 3D tetrahedron set // fits a line to a 3D tetrahedron set
template < typename InputIterator, template < typename InputIterator,
typename K, typename K,
typename Vcm_traits > typename Diagonalize_traits >
typename K::FT typename K::FT
linear_least_squares_fitting_3(InputIterator first, linear_least_squares_fitting_3(InputIterator first,
InputIterator beyond, InputIterator beyond,
@ -264,7 +264,7 @@ linear_least_squares_fitting_3(InputIterator first,
const typename K::Tetrahedron_3*, // used for indirection const typename K::Tetrahedron_3*, // used for indirection
const K& k, // kernel const K& k, // kernel
const CGAL::Dimension_tag<1>& tag, const CGAL::Dimension_tag<1>& tag,
const Vcm_traits& vcm_traits) const Diagonalize_traits& diagonalize_traits)
{ {
typedef typename K::Tetrahedron_3 Tetrahedron; typedef typename K::Tetrahedron_3 Tetrahedron;
typedef typename K::Segment_3 Segment; typedef typename K::Segment_3 Segment;
@ -288,14 +288,14 @@ linear_least_squares_fitting_3(InputIterator first,
// compute fitting line // compute fitting line
return linear_least_squares_fitting_3(segments.begin(),segments.end(),line,c,(Segment*)NULL,k,tag, return linear_least_squares_fitting_3(segments.begin(),segments.end(),line,c,(Segment*)NULL,k,tag,
vcm_traits); diagonalize_traits);
} // end linear_least_squares_fitting_tetrahedrons_3 } // end linear_least_squares_fitting_tetrahedrons_3
// fits a line to a 3D tetrahedron set // fits a line to a 3D tetrahedron set
template < typename InputIterator, template < typename InputIterator,
typename K, typename K,
typename Vcm_traits > typename Diagonalize_traits >
typename K::FT typename K::FT
linear_least_squares_fitting_3(InputIterator first, linear_least_squares_fitting_3(InputIterator first,
InputIterator beyond, InputIterator beyond,
@ -304,7 +304,7 @@ linear_least_squares_fitting_3(InputIterator first,
const typename K::Tetrahedron_3*, // used for indirection const typename K::Tetrahedron_3*, // used for indirection
const K& k, // kernel const K& k, // kernel
const CGAL::Dimension_tag<0>& tag, const CGAL::Dimension_tag<0>& tag,
const Vcm_traits& vcm_traits) const Diagonalize_traits& diagonalize_traits)
{ {
typedef typename K::Tetrahedron_3 Tetrahedron; typedef typename K::Tetrahedron_3 Tetrahedron;
typedef typename K::Point_3 Point; typedef typename K::Point_3 Point;
@ -326,7 +326,7 @@ linear_least_squares_fitting_3(InputIterator first,
// compute fitting line // compute fitting line
return linear_least_squares_fitting_3(points.begin(),points.end(),line,c,(Point*)NULL,k,tag, return linear_least_squares_fitting_3(points.begin(),points.end(),line,c,(Point*)NULL,k,tag,
vcm_traits); diagonalize_traits);
} // end linear_least_squares_fitting_tetrahedra_3 } // end linear_least_squares_fitting_tetrahedra_3

View File

@ -39,7 +39,7 @@ namespace internal {
// direction by default) // direction by default)
template < typename InputIterator, template < typename InputIterator,
typename Kernel, typename Vcm_traits > typename Kernel, typename Diagonalize_traits >
typename Kernel::FT typename Kernel::FT
linear_least_squares_fitting_2(InputIterator first, linear_least_squares_fitting_2(InputIterator first,
InputIterator beyond, InputIterator beyond,
@ -48,7 +48,7 @@ linear_least_squares_fitting_2(InputIterator first,
const typename Kernel::Triangle_2*,// used for indirection const typename Kernel::Triangle_2*,// used for indirection
const Kernel&, // kernel const Kernel&, // kernel
const CGAL::Dimension_tag<2>& tag, const CGAL::Dimension_tag<2>& tag,
const Vcm_traits&) const Diagonalize_traits&)
{ {
// types // types
typedef typename Kernel::FT FT; typedef typename Kernel::FT FT;
@ -128,7 +128,7 @@ linear_least_squares_fitting_2(InputIterator first,
std::pair<Vector,Vector> eigen_vectors; std::pair<Vector,Vector> eigen_vectors;
CGAL::cpp11::array<FT, 2> eigen_values1 = {{ 0. , 0. }}; CGAL::cpp11::array<FT, 2> eigen_values1 = {{ 0. , 0. }};
CGAL::cpp11::array<FT, 4> eigen_vectors1 = {{ 0., 0., 0. }}; CGAL::cpp11::array<FT, 4> eigen_vectors1 = {{ 0., 0., 0. }};
Vcm_traits::diagonalize_selfadjoint_covariance_matrix Diagonalize_traits::diagonalize_selfadjoint_covariance_matrix
(covariance, eigen_values1, eigen_vectors1); (covariance, eigen_values1, eigen_vectors1);
eigen_values = std::make_pair(eigen_values1[1],eigen_values1[0]); eigen_values = std::make_pair(eigen_values1[1],eigen_values1[0]);
@ -152,7 +152,7 @@ linear_least_squares_fitting_2(InputIterator first,
template < typename InputIterator, template < typename InputIterator,
typename Kernel, typename Kernel,
typename Vcm_traits > typename Diagonalize_traits >
typename Kernel::FT typename Kernel::FT
linear_least_squares_fitting_2(InputIterator first, linear_least_squares_fitting_2(InputIterator first,
InputIterator beyond, InputIterator beyond,
@ -161,7 +161,7 @@ linear_least_squares_fitting_2(InputIterator first,
const typename Kernel::Triangle_2*,// used for indirection const typename Kernel::Triangle_2*,// used for indirection
const Kernel&, // kernel const Kernel&, // kernel
const CGAL::Dimension_tag<1>& tag, const CGAL::Dimension_tag<1>& tag,
const Vcm_traits& vcm_traits) const Diagonalize_traits& diagonalize_traits)
{ {
// types // types
typedef typename Kernel::Triangle_2 Triangle; typedef typename Kernel::Triangle_2 Triangle;
@ -182,13 +182,13 @@ linear_least_squares_fitting_2(InputIterator first,
} }
return linear_least_squares_fitting_2(segments.begin(),segments.end(),line,c,tag,Kernel(), return linear_least_squares_fitting_2(segments.begin(),segments.end(),line,c,tag,Kernel(),
vcm_traits); diagonalize_traits);
} // end linear_least_squares_fitting_2 for triangle set with 1D tag } // end linear_least_squares_fitting_2 for triangle set with 1D tag
template < typename InputIterator, template < typename InputIterator,
typename Kernel, typename Kernel,
typename Vcm_traits > typename Diagonalize_traits >
typename Kernel::FT typename Kernel::FT
linear_least_squares_fitting_2(InputIterator first, linear_least_squares_fitting_2(InputIterator first,
InputIterator beyond, InputIterator beyond,
@ -197,7 +197,7 @@ linear_least_squares_fitting_2(InputIterator first,
const typename Kernel::Triangle_2*,// used for indirection const typename Kernel::Triangle_2*,// used for indirection
const Kernel&, // kernel const Kernel&, // kernel
const CGAL::Dimension_tag<0>& tag, const CGAL::Dimension_tag<0>& tag,
const Vcm_traits& vcm_traits) const Diagonalize_traits& diagonalize_traits)
{ {
// types // types
@ -219,7 +219,7 @@ linear_least_squares_fitting_2(InputIterator first,
} }
return linear_least_squares_fitting_2(points.begin(),points.end(),line,c,tag,Kernel(), return linear_least_squares_fitting_2(points.begin(),points.end(),line,c,tag,Kernel(),
vcm_traits); diagonalize_traits);
} // end linear_least_squares_fitting_2 for triangle set with 0D tag } // end linear_least_squares_fitting_2 for triangle set with 0D tag

View File

@ -34,7 +34,7 @@ namespace internal {
// fits a plane to a 3D triangle set // fits a plane to a 3D triangle set
template < typename InputIterator, template < typename InputIterator,
typename K, typename K,
typename Vcm_traits > typename Diagonalize_traits >
typename K::FT typename K::FT
linear_least_squares_fitting_3(InputIterator first, linear_least_squares_fitting_3(InputIterator first,
InputIterator beyond, InputIterator beyond,
@ -43,7 +43,7 @@ linear_least_squares_fitting_3(InputIterator first,
const typename K::Triangle_3*, // used for indirection const typename K::Triangle_3*, // used for indirection
const K& k, // kernel const K& k, // kernel
const CGAL::Dimension_tag<2>& tag, const CGAL::Dimension_tag<2>& tag,
const Vcm_traits& vcm_traits) const Diagonalize_traits& diagonalize_traits)
{ {
typedef typename K::FT FT; typedef typename K::FT FT;
typedef typename K::Triangle_3 Triangle; typedef typename K::Triangle_3 Triangle;
@ -59,14 +59,14 @@ linear_least_squares_fitting_3(InputIterator first,
assemble_covariance_matrix_3(first,beyond,covariance,c,k,(Triangle*) NULL,tag); assemble_covariance_matrix_3(first,beyond,covariance,c,k,(Triangle*) NULL,tag);
// compute fitting plane // compute fitting plane
return fitting_plane_3(covariance,c,plane,k,vcm_traits); return fitting_plane_3(covariance,c,plane,k,diagonalize_traits);
} // end linear_least_squares_fitting_triangles_3 } // end linear_least_squares_fitting_triangles_3
// fits a plane to a 3D triangle set // fits a plane to a 3D triangle set
template < typename InputIterator, template < typename InputIterator,
typename K, typename K,
typename Vcm_traits > typename Diagonalize_traits >
typename K::FT typename K::FT
linear_least_squares_fitting_3(InputIterator first, linear_least_squares_fitting_3(InputIterator first,
InputIterator beyond, InputIterator beyond,
@ -75,7 +75,7 @@ linear_least_squares_fitting_3(InputIterator first,
const typename K::Triangle_3*, // used for indirection const typename K::Triangle_3*, // used for indirection
const K& k, // kernel const K& k, // kernel
const CGAL::Dimension_tag<1>& tag, const CGAL::Dimension_tag<1>& tag,
const Vcm_traits& vcm_traits) const Diagonalize_traits& diagonalize_traits)
{ {
typedef typename K::Triangle_3 Triangle; typedef typename K::Triangle_3 Triangle;
typedef typename K::Segment_3 Segment; typedef typename K::Segment_3 Segment;
@ -96,14 +96,14 @@ linear_least_squares_fitting_3(InputIterator first,
// compute fitting plane // compute fitting plane
return linear_least_squares_fitting_3(segments.begin(),segments.end(),plane,c,(Segment*)NULL,k,tag, return linear_least_squares_fitting_3(segments.begin(),segments.end(),plane,c,(Segment*)NULL,k,tag,
vcm_traits); diagonalize_traits);
} // end linear_least_squares_fitting_triangles_3 } // end linear_least_squares_fitting_triangles_3
// fits a plane to a 3D triangle set // fits a plane to a 3D triangle set
template < typename InputIterator, template < typename InputIterator,
typename K, typename K,
typename Vcm_traits > typename Diagonalize_traits >
typename K::FT typename K::FT
linear_least_squares_fitting_3(InputIterator first, linear_least_squares_fitting_3(InputIterator first,
InputIterator beyond, InputIterator beyond,
@ -112,7 +112,7 @@ linear_least_squares_fitting_3(InputIterator first,
const typename K::Triangle_3*, // used for indirection const typename K::Triangle_3*, // used for indirection
const K& k, // kernel const K& k, // kernel
const CGAL::Dimension_tag<0>& tag, const CGAL::Dimension_tag<0>& tag,
const Vcm_traits& vcm_traits) const Diagonalize_traits& diagonalize_traits)
{ {
typedef typename K::Triangle_3 Triangle; typedef typename K::Triangle_3 Triangle;
typedef typename K::Point_3 Point; typedef typename K::Point_3 Point;
@ -132,14 +132,14 @@ linear_least_squares_fitting_3(InputIterator first,
// compute fitting plane // compute fitting plane
return linear_least_squares_fitting_3(points.begin(),points.end(),plane,c,(Point*)NULL,k,tag, return linear_least_squares_fitting_3(points.begin(),points.end(),plane,c,(Point*)NULL,k,tag,
vcm_traits); diagonalize_traits);
} // end linear_least_squares_fitting_triangles_3 } // end linear_least_squares_fitting_triangles_3
// fits a line to a 3D triangle set // fits a line to a 3D triangle set
template < typename InputIterator, template < typename InputIterator,
typename K, typename K,
typename Vcm_traits > typename Diagonalize_traits >
typename K::FT typename K::FT
linear_least_squares_fitting_3(InputIterator first, linear_least_squares_fitting_3(InputIterator first,
InputIterator beyond, InputIterator beyond,
@ -148,7 +148,7 @@ linear_least_squares_fitting_3(InputIterator first,
const typename K::Triangle_3*, // used for indirection const typename K::Triangle_3*, // used for indirection
const K& k, // kernel const K& k, // kernel
const CGAL::Dimension_tag<2>& tag, const CGAL::Dimension_tag<2>& tag,
const Vcm_traits& vcm_traits) const Diagonalize_traits& diagonalize_traits)
{ {
typedef typename K::FT FT; typedef typename K::FT FT;
typedef typename K::Triangle_3 Triangle; typedef typename K::Triangle_3 Triangle;
@ -164,14 +164,14 @@ linear_least_squares_fitting_3(InputIterator first,
assemble_covariance_matrix_3(first,beyond,covariance,c,k,(Triangle*) NULL,tag); assemble_covariance_matrix_3(first,beyond,covariance,c,k,(Triangle*) NULL,tag);
// compute fitting line // compute fitting line
return fitting_line_3(covariance,c,line,k,vcm_traits); return fitting_line_3(covariance,c,line,k,diagonalize_traits);
} // end linear_least_squares_fitting_triangles_3 } // end linear_least_squares_fitting_triangles_3
// fits a line to a 3D triangle set // fits a line to a 3D triangle set
template < typename InputIterator, template < typename InputIterator,
typename K, typename K,
typename Vcm_traits > typename Diagonalize_traits >
typename K::FT typename K::FT
linear_least_squares_fitting_3(InputIterator first, linear_least_squares_fitting_3(InputIterator first,
InputIterator beyond, InputIterator beyond,
@ -180,7 +180,7 @@ linear_least_squares_fitting_3(InputIterator first,
const typename K::Triangle_3*, // used for indirection const typename K::Triangle_3*, // used for indirection
const K& k, // kernel const K& k, // kernel
const CGAL::Dimension_tag<1>& tag, const CGAL::Dimension_tag<1>& tag,
const Vcm_traits& vcm_traits) const Diagonalize_traits& diagonalize_traits)
{ {
typedef typename K::Triangle_3 Triangle; typedef typename K::Triangle_3 Triangle;
typedef typename K::Segment_3 Segment; typedef typename K::Segment_3 Segment;
@ -201,14 +201,14 @@ linear_least_squares_fitting_3(InputIterator first,
// compute fitting line // compute fitting line
return linear_least_squares_fitting_3(segments.begin(),segments.end(),line,c,(Segment*)NULL,k,tag, return linear_least_squares_fitting_3(segments.begin(),segments.end(),line,c,(Segment*)NULL,k,tag,
vcm_traits); diagonalize_traits);
} // end linear_least_squares_fitting_triangles_3 } // end linear_least_squares_fitting_triangles_3
// fits a line to a 3D triangle set // fits a line to a 3D triangle set
template < typename InputIterator, template < typename InputIterator,
typename K, typename K,
typename Vcm_traits > typename Diagonalize_traits >
typename K::FT typename K::FT
linear_least_squares_fitting_3(InputIterator first, linear_least_squares_fitting_3(InputIterator first,
InputIterator beyond, InputIterator beyond,
@ -217,7 +217,7 @@ linear_least_squares_fitting_3(InputIterator first,
const typename K::Triangle_3*, // used for indirection const typename K::Triangle_3*, // used for indirection
const K& k, // kernel const K& k, // kernel
const CGAL::Dimension_tag<0>& tag, const CGAL::Dimension_tag<0>& tag,
const Vcm_traits& vcm_traits) const Diagonalize_traits& diagonalize_traits)
{ {
typedef typename K::Triangle_3 Triangle; typedef typename K::Triangle_3 Triangle;
typedef typename K::Point_3 Point; typedef typename K::Point_3 Point;
@ -237,7 +237,7 @@ linear_least_squares_fitting_3(InputIterator first,
// compute fitting line // compute fitting line
return linear_least_squares_fitting_3(points.begin(),points.end(),line,c,(Point*)NULL,k,tag, return linear_least_squares_fitting_3(points.begin(),points.end(),line,c,(Point*)NULL,k,tag,
vcm_traits); diagonalize_traits);
} // end linear_least_squares_fitting_triangles_3 } // end linear_least_squares_fitting_triangles_3

View File

@ -3,10 +3,10 @@
#include <CGAL/algorithm.h> #include <CGAL/algorithm.h>
#include <CGAL/linear_least_squares_fitting_2.h> #include <CGAL/linear_least_squares_fitting_2.h>
#include <CGAL/point_generators_2.h> #include <CGAL/point_generators_2.h>
#include <CGAL/Internal_vcm_traits.h> #include <CGAL/Internal_diagonalize_traits.h>
#ifdef CGAL_EIGEN3_ENABLED #ifdef CGAL_EIGEN3_ENABLED
#include <CGAL/Eigen_vcm_traits.h> #include <CGAL/Eigen_diagonalize_traits.h>
#endif #endif
#include <vector> #include <vector>
@ -38,9 +38,9 @@ void test_2D()
quality = linear_least_squares_fitting_2(points.begin(),points.end(),line,centroid,CGAL::Dimension_tag<0>()); quality = linear_least_squares_fitting_2(points.begin(),points.end(),line,centroid,CGAL::Dimension_tag<0>());
quality = linear_least_squares_fitting_2(points.begin(),points.end(),line,centroid,CGAL::Dimension_tag<0>(),k, quality = linear_least_squares_fitting_2(points.begin(),points.end(),line,centroid,CGAL::Dimension_tag<0>(),k,
#ifdef CGAL_EIGEN3_ENABLED #ifdef CGAL_EIGEN3_ENABLED
CGAL::Eigen_vcm_traits<typename Kernel::FT, 2>() CGAL::Eigen_diagonalize_traits<typename Kernel::FT, 2>()
#else #else
CGAL::Internal_vcm_traits<typename Kernel::FT, 2>() CGAL::Internal_diagonalize_traits<typename Kernel::FT, 2>()
#endif #endif
); );
@ -85,9 +85,9 @@ void test_2D_point_set(const unsigned int nb_points)
quality = linear_least_squares_fitting_2(points.begin(),points.end(),line,centroid,CGAL::Dimension_tag<0>()); quality = linear_least_squares_fitting_2(points.begin(),points.end(),line,centroid,CGAL::Dimension_tag<0>());
quality = linear_least_squares_fitting_2(points.begin(),points.end(),line,centroid,CGAL::Dimension_tag<0>(),k, quality = linear_least_squares_fitting_2(points.begin(),points.end(),line,centroid,CGAL::Dimension_tag<0>(),k,
#ifdef CGAL_EIGEN3_ENABLED #ifdef CGAL_EIGEN3_ENABLED
CGAL::Eigen_vcm_traits<typename Kernel::FT, 2>() CGAL::Eigen_diagonalize_traits<typename Kernel::FT, 2>()
#else #else
CGAL::Internal_vcm_traits<typename Kernel::FT, 2>() CGAL::Internal_diagonalize_traits<typename Kernel::FT, 2>()
#endif #endif
); );
std::cout << "done (quality: " << quality << ")" << std::endl; std::cout << "done (quality: " << quality << ")" << std::endl;

View File

@ -3,9 +3,9 @@
#include <CGAL/Cartesian.h> #include <CGAL/Cartesian.h>
#include <CGAL/linear_least_squares_fitting_3.h> #include <CGAL/linear_least_squares_fitting_3.h>
#include <CGAL/Internal_vcm_traits.h> #include <CGAL/Internal_diagonalize_traits.h>
#ifdef CGAL_EIGEN3_ENABLED #ifdef CGAL_EIGEN3_ENABLED
#include <CGAL/Eigen_vcm_traits.h> #include <CGAL/Eigen_diagonalize_traits.h>
#endif #endif
#include <cassert> #include <cassert>
@ -50,9 +50,9 @@ void fit_point_set(std::list<Point>& points,
quality = linear_least_squares_fitting_3(points.begin(),points.end(),line,centroid,CGAL::Dimension_tag<0>()); quality = linear_least_squares_fitting_3(points.begin(),points.end(),line,centroid,CGAL::Dimension_tag<0>());
quality = linear_least_squares_fitting_3(points.begin(),points.end(),line,centroid,CGAL::Dimension_tag<0>(),kernel, quality = linear_least_squares_fitting_3(points.begin(),points.end(),line,centroid,CGAL::Dimension_tag<0>(),kernel,
#ifdef CGAL_EIGEN3_ENABLED #ifdef CGAL_EIGEN3_ENABLED
CGAL::Eigen_vcm_traits<typename Kernel::FT, 3>() CGAL::Eigen_diagonalize_traits<typename Kernel::FT, 3>()
#else #else
CGAL::Internal_vcm_traits<typename Kernel::FT, 3>() CGAL::Internal_diagonalize_traits<typename Kernel::FT, 3>()
#endif #endif
); );
@ -63,9 +63,9 @@ void fit_point_set(std::list<Point>& points,
quality = linear_least_squares_fitting_3(points.begin(),points.end(),plane,centroid,CGAL::Dimension_tag<0>()); quality = linear_least_squares_fitting_3(points.begin(),points.end(),plane,centroid,CGAL::Dimension_tag<0>());
quality = linear_least_squares_fitting_3(points.begin(),points.end(),plane,centroid,CGAL::Dimension_tag<0>(),kernel, quality = linear_least_squares_fitting_3(points.begin(),points.end(),plane,centroid,CGAL::Dimension_tag<0>(),kernel,
#ifdef CGAL_EIGEN3_ENABLED #ifdef CGAL_EIGEN3_ENABLED
CGAL::Eigen_vcm_traits<typename Kernel::FT, 3>() CGAL::Eigen_diagonalize_traits<typename Kernel::FT, 3>()
#else #else
CGAL::Internal_vcm_traits<typename Kernel::FT, 3>() CGAL::Internal_diagonalize_traits<typename Kernel::FT, 3>()
#endif #endif
); );
std::cout << "done (quality: " << quality << ")" << std::endl; std::cout << "done (quality: " << quality << ")" << std::endl;

View File

@ -5,9 +5,9 @@
#include <CGAL/algorithm.h> #include <CGAL/algorithm.h>
#include <CGAL/linear_least_squares_fitting_3.h> #include <CGAL/linear_least_squares_fitting_3.h>
#include <CGAL/point_generators_3.h> #include <CGAL/point_generators_3.h>
#include <CGAL/Internal_vcm_traits.h> #include <CGAL/Internal_diagonalize_traits.h>
#ifdef CGAL_EIGEN3_ENABLED #ifdef CGAL_EIGEN3_ENABLED
#include <CGAL/Eigen_vcm_traits.h> #include <CGAL/Eigen_diagonalize_traits.h>
#endif #endif
#include <vector> #include <vector>
@ -40,9 +40,9 @@ FT fit_set(std::list<Segment>& segments,
quality = linear_least_squares_fitting_3(segments.begin(),segments.end(),line,centroid,CGAL::Dimension_tag<1>()); quality = linear_least_squares_fitting_3(segments.begin(),segments.end(),line,centroid,CGAL::Dimension_tag<1>());
quality = linear_least_squares_fitting_3(segments.begin(),segments.end(),line,centroid,CGAL::Dimension_tag<1>(),kernel, quality = linear_least_squares_fitting_3(segments.begin(),segments.end(),line,centroid,CGAL::Dimension_tag<1>(),kernel,
#ifdef CGAL_EIGEN3_ENABLED #ifdef CGAL_EIGEN3_ENABLED
CGAL::Eigen_vcm_traits<typename Kernel::FT, 3>() CGAL::Eigen_diagonalize_traits<typename Kernel::FT, 3>()
#else #else
CGAL::Internal_vcm_traits<typename Kernel::FT, 3>() CGAL::Internal_diagonalize_traits<typename Kernel::FT, 3>()
#endif #endif
); );
@ -51,9 +51,9 @@ FT fit_set(std::list<Segment>& segments,
quality = linear_least_squares_fitting_3(segments.begin(),segments.end(),plane,centroid,CGAL::Dimension_tag<1>()); quality = linear_least_squares_fitting_3(segments.begin(),segments.end(),plane,centroid,CGAL::Dimension_tag<1>());
quality = linear_least_squares_fitting_3(segments.begin(),segments.end(),plane,centroid,CGAL::Dimension_tag<1>(),kernel, quality = linear_least_squares_fitting_3(segments.begin(),segments.end(),plane,centroid,CGAL::Dimension_tag<1>(),kernel,
#ifdef CGAL_EIGEN3_ENABLED #ifdef CGAL_EIGEN3_ENABLED
CGAL::Eigen_vcm_traits<typename Kernel::FT, 3>() CGAL::Eigen_diagonalize_traits<typename Kernel::FT, 3>()
#else #else
CGAL::Internal_vcm_traits<typename Kernel::FT, 3>() CGAL::Internal_diagonalize_traits<typename Kernel::FT, 3>()
#endif #endif
); );

View File

@ -35,9 +35,9 @@ int main(void)
Point centroid; Point centroid;
#ifdef CGAL_EIGEN3_ENABLED #ifdef CGAL_EIGEN3_ENABLED
CGAL::Eigen_vcm_traits<typename Kernel::FT, 3> vcm_traits; CGAL::Eigen_diagonalize_traits<typename Kernel::FT, 3> diagonalize_traits;
#else #else
CGAL::Internal_vcm_traits<typename Kernel::FT, 3> vcm_traits; CGAL::Internal_diagonalize_traits<typename Kernel::FT, 3> diagonalize_traits;
#endif #endif
linear_least_squares_fitting_3(spheres.begin(),spheres.end(),line,CGAL::Dimension_tag<3>()); linear_least_squares_fitting_3(spheres.begin(),spheres.end(),line,CGAL::Dimension_tag<3>());
@ -45,17 +45,17 @@ int main(void)
linear_least_squares_fitting_3(spheres.begin(),spheres.end(),line,centroid,CGAL::Dimension_tag<3>()); linear_least_squares_fitting_3(spheres.begin(),spheres.end(),line,centroid,CGAL::Dimension_tag<3>());
linear_least_squares_fitting_3(spheres.begin(),spheres.end(),line,centroid,CGAL::Dimension_tag<2>()); linear_least_squares_fitting_3(spheres.begin(),spheres.end(),line,centroid,CGAL::Dimension_tag<2>());
linear_least_squares_fitting_3(spheres.begin(),spheres.end(),line,centroid,CGAL::Dimension_tag<3>(),kernel, linear_least_squares_fitting_3(spheres.begin(),spheres.end(),line,centroid,CGAL::Dimension_tag<3>(),kernel,
vcm_traits); diagonalize_traits);
linear_least_squares_fitting_3(spheres.begin(),spheres.end(),line,centroid,CGAL::Dimension_tag<2>(),kernel, linear_least_squares_fitting_3(spheres.begin(),spheres.end(),line,centroid,CGAL::Dimension_tag<2>(),kernel,
vcm_traits); diagonalize_traits);
linear_least_squares_fitting_3(spheres.begin(),spheres.end(),plane,CGAL::Dimension_tag<3>()); linear_least_squares_fitting_3(spheres.begin(),spheres.end(),plane,CGAL::Dimension_tag<3>());
linear_least_squares_fitting_3(spheres.begin(),spheres.end(),plane,CGAL::Dimension_tag<2>()); linear_least_squares_fitting_3(spheres.begin(),spheres.end(),plane,CGAL::Dimension_tag<2>());
linear_least_squares_fitting_3(spheres.begin(),spheres.end(),plane,centroid,CGAL::Dimension_tag<3>()); linear_least_squares_fitting_3(spheres.begin(),spheres.end(),plane,centroid,CGAL::Dimension_tag<3>());
linear_least_squares_fitting_3(spheres.begin(),spheres.end(),plane,centroid,CGAL::Dimension_tag<2>()); linear_least_squares_fitting_3(spheres.begin(),spheres.end(),plane,centroid,CGAL::Dimension_tag<2>());
linear_least_squares_fitting_3(spheres.begin(),spheres.end(),plane,centroid,CGAL::Dimension_tag<3>(),kernel, linear_least_squares_fitting_3(spheres.begin(),spheres.end(),plane,centroid,CGAL::Dimension_tag<3>(),kernel,
vcm_traits); diagonalize_traits);
linear_least_squares_fitting_3(spheres.begin(),spheres.end(),plane,centroid,CGAL::Dimension_tag<2>(),kernel, linear_least_squares_fitting_3(spheres.begin(),spheres.end(),plane,centroid,CGAL::Dimension_tag<2>(),kernel,
vcm_traits); diagonalize_traits);
return 0; return 0;
} }

View File

@ -3,10 +3,14 @@ namespace CGAL {
/*! /*!
\ingroup PkgSolver \ingroup PkgSolver
The class `Eigen_vcm_traits` provides an interface to the diagonalization of Variance-Covariance Matrices of \ref thirdpartyEigen "Eigen". The class `Eigen_diagonalize_traits` provides an interface to the
The version 3.1 (or greater) of \ref thirdpartyEigen "Eigen" must be available on the system. diagonalization of covariance matrices of \ref thirdpartyEigen
"Eigen".
\cgalModels `VCMTraits` The version 3.1 (or greater) of \ref thirdpartyEigen "Eigen" must be
available on the system.
\cgalModels `DiagonalizeTraits`
`FT`: floating type `FT`: floating type
@ -24,7 +28,7 @@ Example
template <typename FT, unsigned int dim = 3> template <typename FT, unsigned int dim = 3>
class Eigen_vcm_traits{ class Eigen_diagonalize_traits{
public: public:
static bool static bool

View File

@ -3,9 +3,11 @@ namespace CGAL {
/*! /*!
\ingroup PkgSolver \ingroup PkgSolver
The class `Internal_vcm_traits` provides an internal implementation for the diagonalization of Variance-Covariance Matrices. The class `Internal_diagonalize_traits` provides an internal
implementation for the diagonalization of Variance-Covariance
Matrices.
\cgalModels `VCMTraits` \cgalModels `DiagonalizeTraits`
`FT`: floating type `FT`: floating type
@ -20,7 +22,7 @@ Example
template <typename FT, unsigned int dim = 3> template <typename FT, unsigned int dim = 3>
class Internal_vcm_traits{ class Internal_diagonalize_traits{
public: public:
static bool static bool

View File

@ -3,8 +3,9 @@
\cgalConcept \cgalConcept
Concept providing functions to extract eigenvectors and eigenvalue Concept providing functions to extract eigenvectors and eigenvalue
from covariance matrices represented by an array `a`. For example, a from covariance matrices represented by an array `a`, using symmetric
matrix of dimension 3 is defined as follows: diagonalization. For example, a matrix of dimension 3 is defined as
follows:
<center> <center>
\f$ \begin{bmatrix} \f$ \begin{bmatrix}
a[0] & a[1] & a[2] \\ a[0] & a[1] & a[2] \\
@ -12,11 +13,11 @@ matrix of dimension 3 is defined as follows:
a[2] & a[4] & a[5] \\ a[2] & a[4] & a[5] \\
\end{bmatrix}\f$ \end{bmatrix}\f$
</center> </center>
\cgalHasModel `CGAL::Eigen_vcm_traits` \cgalHasModel `CGAL::Eigen_diagonalize_traits`
\cgalHasModel `CGAL::Internal_vcm_traits` \cgalHasModel `CGAL::Internal_diagonalize_traits`
*/ */
template <typename FT, unsigned int dim = 3> template <typename FT, unsigned int dim = 3>
class VCMTraits class DiagonalizeTraits
{ {
public: public:
/// fill `eigenvalues` with the eigenvalues of the covariance matrix represented by `cov`. /// fill `eigenvalues` with the eigenvalues of the covariance matrix represented by `cov`.

View File

@ -28,17 +28,19 @@
- `SparseLinearAlgebraTraits_d` - `SparseLinearAlgebraTraits_d`
- `SparseLinearAlgebraTraitsWithFactor_d` - `SparseLinearAlgebraTraitsWithFactor_d`
- `SvdTraits` - `SvdTraits`
- `VCMTraits` - `DiagonalizeTraits`
## Classes ## ## Classes ##
- `CGAL::Eigen_solver_traits` - `CGAL::Eigen_solver_traits`
- `CGAL::Eigen_svd` - `CGAL::Eigen_svd`
- `CGAL::Eigen_vcm_traits` - `CGAL::Eigen_diagonalize_traits`
- `CGAL::Eigen_matrix` - `CGAL::Eigen_matrix`
- `CGAL::Eigen_vector` - `CGAL::Eigen_vector`
- `CGAL::Eigen_sparse_matrix` - `CGAL::Eigen_sparse_matrix`
- `CGAL::Eigen_sparse_symmetric_matrix` - `CGAL::Eigen_sparse_symmetric_matrix`
- `CGAL::Internal_diagonalize_traits`
- `CGAL::Lapack_svd`
*/ */

View File

@ -16,20 +16,20 @@ equivalent models for other solvers, for example those found in the
<a href="https://software.intel.com/en-us/intel-mkl">Intel Math Kernel Library (MKL)</a>. <a href="https://software.intel.com/en-us/intel-mkl">Intel Math Kernel Library (MKL)</a>.
\section SectionSolverVCM Matrix Diagonalization \section SectionSolverDiagonalize Matrix Diagonalization
The concept `VCMTraits<T,dim>` defines an interface for the The concept `DiagonalizeTraits<T,dim>` defines an interface for the
diagonalization and computation of eigenvectors and eigenvalues of a diagonalization and computation of eigenvectors and eigenvalues of a
symmetric matrix. `T` is the number type and `dim` is the dimension of symmetric matrix. `T` is the number type and `dim` is the dimension of
the matrices and vector (set to 3 by default). We provide two models the matrices and vector (set to 3 by default). We provide two models
for this concept: for this concept:
- `Eigen_vcm_traits<T,dim>` uses the \ref thirdpartyEigen library. - `Eigen_diagonalize_traits<T,dim>` uses the \ref thirdpartyEigen library.
- `Internal_vcm_traits<T,dim>` is an internal implementation that does not - `Internal_diagonalize_traits<T,dim>` is an internal implementation that does not
depend on another library. depend on another library.
Although both models achieve the same computation, Although both models achieve the same computation,
`Eigen_vcm_traits<T,dim>` is faster and should thus be used if the `Eigen_diagonalize_traits<T,dim>` is faster and should thus be used if the
\ref thirdpartyEigen library is available. The eigenvalues are stored \ref thirdpartyEigen library is available. The eigenvalues are stored
in ascending order and eigenvectors are stored in accordance. in ascending order and eigenvectors are stored in accordance.

View File

@ -1,9 +1,9 @@
#include <iostream> #include <iostream>
#ifdef CGAL_EIGEN3_ENABLED #ifdef CGAL_EIGEN3_ENABLED
#include <CGAL/Eigen_vcm_traits.h> #include <CGAL/Eigen_diagonalize_traits.h>
#else #else
#include <CGAL/Internal_vcm_traits.h> #include <CGAL/Internal_diagonalize_traits.h>
#endif #endif
@ -12,9 +12,9 @@ typedef CGAL::cpp11::array<FT, 6> Eigen_matrix;
typedef CGAL::cpp11::array<FT, 3> Eigen_vector; typedef CGAL::cpp11::array<FT, 3> Eigen_vector;
typedef CGAL::cpp11::array<FT, 9> Eigen_three_vectors; typedef CGAL::cpp11::array<FT, 9> Eigen_three_vectors;
#ifdef CGAL_EIGEN3_ENABLED #ifdef CGAL_EIGEN3_ENABLED
typedef CGAL::Eigen_vcm_traits<FT, 3> Vcm_traits; typedef CGAL::Eigen_diagonalize_traits<FT, 3> Diagonalize_traits;
#else #else
typedef CGAL::Internal_vcm_traits<FT, 3> Vcm_traits; typedef CGAL::Internal_diagonalize_traits<FT, 3> Diagonalize_traits;
#endif #endif
int main(void) int main(void)
@ -27,7 +27,7 @@ int main(void)
Eigen_vector eigenvalues; Eigen_vector eigenvalues;
Eigen_three_vectors eigenvectors; Eigen_three_vectors eigenvectors;
if (!(Vcm_traits::diagonalize_selfadjoint_covariance_matrix (covariance, if (!(Diagonalize_traits::diagonalize_selfadjoint_covariance_matrix (covariance,
eigenvalues, eigenvalues,
eigenvectors))) eigenvectors)))
{ {

View File

@ -18,8 +18,8 @@
// Author(s) : Jocelyn Meyron and Quentin Mérigot // Author(s) : Jocelyn Meyron and Quentin Mérigot
// //
#ifndef CGAL_EIGEN_VCM_TRAITS_H #ifndef CGAL_EIGEN_DIAGONALIZE_TRAITS_H
#define CGAL_EIGEN_VCM_TRAITS_H #define CGAL_EIGEN_DIAGONALIZE_TRAITS_H
#include <Eigen/Dense> #include <Eigen/Dense>
#include <Eigen/Eigenvalues> #include <Eigen/Eigenvalues>
@ -28,11 +28,11 @@
namespace CGAL { namespace CGAL {
/// A model of the concept `VCMTraits` using \ref thirdpartyEigen. /// A model of the concept `DiagonalizeTraits` using \ref thirdpartyEigen.
/// \cgalModels `VCMTraits` /// \cgalModels `DiagonalizeTraits`
template <typename FT, unsigned int dim = 3> template <typename FT, unsigned int dim = 3>
class Eigen_vcm_traits{ class Eigen_diagonalize_traits{
typedef Eigen::Matrix<FT, dim, dim> Matrix; typedef Eigen::Matrix<FT, dim, dim> Matrix;
typedef Eigen::Matrix<FT, dim, 1> Vector; typedef Eigen::Matrix<FT, dim, 1> Vector;
@ -146,4 +146,4 @@ public:
} // namespace CGAL } // namespace CGAL
#endif // CGAL_EIGEN_VCM_TRAITS_H #endif // CGAL_EIGEN_DIAGONALIZE_TRAITS_H

View File

@ -1,15 +1,15 @@
#ifndef CGAL_INTERNAL_VCM_TRAITS_H #ifndef CGAL_INTERNAL_DIAGONALIZE_TRAITS_H
#define CGAL_INTERNAL_VCM_TRAITS_H #define CGAL_INTERNAL_DIAGONALIZE_TRAITS_H
#include <CGAL/array.h> #include <CGAL/array.h>
namespace CGAL { namespace CGAL {
/// A model of the concept `VCMTraits` /// A model of the concept `DiagonalizeTraits`
/// \cgalModels `VCMTraits` /// \cgalModels `DiagonalizeTraits`
template <typename FT, unsigned int dim = 3> template <typename FT, unsigned int dim = 3>
class Internal_vcm_traits{ class Internal_diagonalize_traits{
public: public:
static bool static bool
@ -244,4 +244,4 @@ class Internal_vcm_traits{
} // namespace CGAL } // namespace CGAL
#endif // CGAL_INTERNAL_VCM_TRAITS_H #endif // CGAL_INTERNAL_DIAGONALIZE_TRAITS_H