File: Interpolation_gradient_fitting_traits_2.h

package info (click to toggle)
cgal 3.2.1-2
  • links: PTS
  • area: non-free
  • in suites: etch, etch-m68k
  • size: 47,752 kB
  • ctags: 72,510
  • sloc: cpp: 397,707; ansic: 10,393; sh: 4,232; makefile: 3,713; perl: 394; sed: 9
file content (154 lines) | stat: -rw-r--r-- 4,761 bytes parent folder | download
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