mirror of https://github.com/CGAL/cgal
153 lines
4.4 KiB
C++
153 lines
4.4 KiB
C++
// Copyright (c) 2003 INRIA Sophia-Antipolis (France).
|
|
// All rights reserved.
|
|
//
|
|
// This file is part of CGAL (www.cgal.org).
|
|
//
|
|
// $URL$
|
|
// $Id$
|
|
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-Commercial
|
|
//
|
|
// Author(s) : Julia Floetotto
|
|
|
|
#ifndef CGAL_INTERPOLATION_GRADIENT_FITTING_TRAITS_2_H
|
|
#define CGAL_INTERPOLATION_GRADIENT_FITTING_TRAITS_2_H
|
|
|
|
#include <CGAL/license/Interpolation.h>
|
|
|
|
#include <CGAL/aff_transformation_tags.h>
|
|
|
|
namespace CGAL {
|
|
|
|
//-----------------------------------------------------------------------//
|
|
// Interpolation_gradient_fitting_traits_2
|
|
//-----------------------------------------------------------------------//
|
|
// The class meets the requirement of the concept InterpolationTraits2
|
|
// and GradientFittingTraits2: it defines the geometric
|
|
// operations used by the interpolation methods and the gradient
|
|
// fitting function.
|
|
|
|
template <class Aff_2>
|
|
class Construct_sum_matrix_2
|
|
{
|
|
public:
|
|
typedef Aff_2 Aff_transformation_2;
|
|
|
|
Aff_transformation_2
|
|
operator()(const Aff_transformation_2& tr1,
|
|
const Aff_transformation_2& tr2) const
|
|
{
|
|
return Aff_transformation_2(tr1.m(0,0) + tr2.m(0,0),
|
|
tr1.m(0,1) + tr2.m(0,1),
|
|
tr1.m(0,2) + tr2.m(0,2),
|
|
tr1.m(1,0) + tr2.m(1,0),
|
|
tr1.m(1,1) + tr2.m(1,1),
|
|
tr1.m(1,2) + tr2.m(1,2));
|
|
}
|
|
};
|
|
|
|
template <class Aff_2>
|
|
class Construct_null_matrix_2
|
|
{
|
|
public:
|
|
typedef Aff_2 Aff_transformation_2;
|
|
|
|
Aff_transformation_2
|
|
operator()() const
|
|
{
|
|
return Aff_transformation_2(0,0,0,0,0,0);
|
|
}
|
|
};
|
|
|
|
template <class Aff_2>
|
|
class Construct_scaling_matrix_2
|
|
{
|
|
public:
|
|
typedef Aff_2 Aff_transformation_2;
|
|
|
|
Aff_transformation_2
|
|
operator()(const typename Aff_transformation_2::R::FT & scale) const
|
|
{
|
|
return Aff_transformation_2(SCALING, scale);
|
|
}
|
|
};
|
|
|
|
template < class R >
|
|
class Construct_outer_product_2
|
|
{
|
|
public:
|
|
typedef typename R::Aff_transformation_2 Aff_transformation_2;
|
|
typedef typename R::Vector_2 Vector_2;
|
|
|
|
Aff_transformation_2
|
|
operator()(const Vector_2& v) const
|
|
{
|
|
return Aff_transformation_2(v.x()*v.x(),
|
|
v.x()*v.y(), v.x()*v.y(),
|
|
v.y()*v.y());
|
|
}
|
|
};
|
|
|
|
template <class R>
|
|
class Interpolation_gradient_fitting_traits_2
|
|
{
|
|
public:
|
|
typedef R Rep;
|
|
|
|
typedef typename Rep::FT FT;
|
|
typedef typename Rep::Point_2 Point_d;
|
|
typedef typename Rep::Weighted_point_2 Weighted_point_d;
|
|
typedef typename Rep::Vector_2 Vector_d;
|
|
|
|
typedef typename Rep::Construct_point_2 Construct_point_d;
|
|
typedef typename Rep::Construct_vector_2 Construct_vector_d;
|
|
typedef typename Rep::Construct_scaled_vector_2 Construct_scaled_vector_d;
|
|
//only one not needed by gradient fitting:
|
|
typedef typename Rep::Compute_squared_distance_2 Compute_squared_distance_d;
|
|
|
|
//additional types for gradient computation:
|
|
typedef typename Rep::Aff_transformation_2 Aff_transformation_d;
|
|
|
|
typedef Construct_null_matrix_2<Aff_transformation_d> Construct_null_matrix_d;
|
|
typedef Construct_scaling_matrix_2<Aff_transformation_d> Construct_scaling_matrix_d;
|
|
typedef Construct_sum_matrix_2<Aff_transformation_d> Construct_sum_matrix_d;
|
|
typedef Construct_outer_product_2<Rep> Construct_outer_product_d;
|
|
|
|
|
|
Construct_outer_product_d
|
|
construct_outer_product_d_object() const
|
|
{return Construct_outer_product_d();}
|
|
|
|
Construct_sum_matrix_d
|
|
construct_sum_matrix_d_object() const
|
|
{return Construct_sum_matrix_d();}
|
|
|
|
Construct_scaling_matrix_d
|
|
construct_scaling_matrix_d_object() const
|
|
{return Construct_scaling_matrix_d();}
|
|
|
|
Construct_null_matrix_d
|
|
construct_null_matrix_d_object() const
|
|
{return Construct_null_matrix_d();}
|
|
|
|
//also in the traits without gradient computation:
|
|
Construct_scaled_vector_d
|
|
construct_scaled_vector_d_object()const
|
|
{return Construct_scaled_vector_d();}
|
|
|
|
Construct_point_d
|
|
construct_point_d_object()const
|
|
{return Construct_point_d();}
|
|
|
|
Construct_vector_d
|
|
construct_vector_d_object()const
|
|
{return Construct_vector_d();}
|
|
|
|
Compute_squared_distance_d
|
|
compute_squared_distance_d_object()const
|
|
{return Compute_squared_distance_d();}
|
|
};
|
|
|
|
} //namespace CGAL
|
|
|
|
#endif // CGAL_INTERPOLATION_GRADIENT_FITTING_TRAITS_2_H
|