1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154
|
// Copyright (c) 2003 INRIA Sophia-Antipolis (France).
// All rights reserved.
//
// This file is part of CGAL (www.cgal.org); you may redistribute it under
// the terms of the Q Public License version 1.0.
// See the file LICENSE.QPL distributed with CGAL.
//
// Licensees holding a valid commercial license may use this file in
// accordance with the commercial license agreement provided with the software.
//
// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
//
// $URL: svn+ssh://scm.gforge.inria.fr/svn/cgal/branches/CGAL-3.2-branch/Interpolation/include/CGAL/Interpolation_gradient_fitting_traits_2.h $
// $Id: Interpolation_gradient_fitting_traits_2.h 28567 2006-02-16 14:30:13Z lsaboret $
//
//
// Author(s) : Julia Floetotto
#ifndef CGAL_INTERPOLATION_GRADIENT_FITTING_TRAITS_2_H
#define CGAL_INTERPOLATION_GRADIENT_FITTING_TRAITS_2_H
#include <CGAL/aff_transformation_tags.h>
CGAL_BEGIN_NAMESPACE
//-----------------------------------------------------------------------//
// 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::Vector_2 Vector_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_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();}
};
CGAL_END_NAMESPACE
#endif // CGAL_INTERPOLATION_GRADIENT_FITTING_TRAITS_2_H
|