IPSDK  4_1_0_2
IPSDK : Image Processing Software Development Kit
AnisotropicScale2d.h
1 // AnisotropicScale2d.h:
3 // ---------------------
4 //
15 
16 #ifndef __IPSDKMATH_ANISOTROPICSCALE2D_H__
17 #define __IPSDKMATH_ANISOTROPICSCALE2D_H__
18 
19 // suppression warnings
20 // warning C4251: 'ipsdk::math::transform::AnisotropicScale2d::g_registrator' : struct 'ipsdk::math::transform::Registrator<ipsdk::math::transform::AnisotropicScale2d>' needs to have dll-interface to be used by clients of class 'ipsdk::math::transform::AnisotropicScale2d'
21 #pragma warning (push)
22 #pragma warning (disable : 4251)
23 
24 #include <IPSDKMath/Geometry/2d/Transform/BaseLinearGeometricTransform2d.h>
25 
26 namespace ipsdk {
27 namespace math {
28 namespace transform {
29 
32 
34 {
35 // predefined public type
36 public:
39 
40  (eTP_ScaleX)
41  (eTP_ScaleY)
42  );
43 
44  // declare geometric transformation 2d
46 
47 public:
51  {
52  setParams(1, 1);
53  }
54  AnisotropicScale2d(const ipReal64 scaleX, const ipReal64 scaleY)
55  {
56  setParams(scaleX, scaleY);
57  }
58  ~AnisotropicScale2d() {}
60 
61 // methods
62 public:
65  static void transform(const ipReal64 scaleX,
66  const ipReal64 scaleY,
67  ipReal64& x, ipReal64& y)
68  {
69  x *= scaleX;
70  y *= scaleY;
71  }
73 
76  static Matrix3d getHomogenousMatrix(const ipReal64 scaleX,
77  const ipReal64 scaleY)
78  {
79  Matrix3d transform;
80  transform(0, 0) = scaleX; transform(0, 1) = 0; transform(0, 2) = 0;
81  transform(1, 0) = 0; transform(1, 1) = scaleY; transform(1, 2) = 0;
82  transform(2, 0) = 0; transform(2, 1) = 0; transform(2, 2) = 1;
83 
84  return transform;
85  }
87 
89  static Matrix3d getInvHomogenousMatrix(const ipReal64 scaleX,
90  const ipReal64 scaleY)
91  {
92  ipReal64 invScaleX = 0;
93  if (scaleX != 0)
94  invScaleX = 1 / scaleX;
95  ipReal64 invScaleY = 0;
96  if (scaleY != 0)
97  invScaleY = 1 / scaleY;
98  return getHomogenousMatrix(invScaleX, invScaleY);
99  }
100 
102  static void getInvParams(ipReal64& scaleX, ipReal64& scaleY)
103  {
104  if (scaleX != 0)
105  scaleX = 1 / scaleX;
106  else
107  scaleX = 0;
108  if (scaleY != 0)
109  scaleY = 1 / scaleY;
110  else
111  scaleY = 0;
112  }
113 
115  static Vector getIdentityParams();
116 
118  void setParams(const ipReal64 scaleX,
119  const ipReal64 scaleY)
120  {
121  _scaleX = scaleX;
122  _scaleY = scaleY;
123  }
124 
128  void setParams(const Vector& params);
129 
131  void setIdentity();
132 
134  void apply(ipReal64& x, ipReal64& y) const;
135 
137  Matrix3d getHomogenousMatrix() const;
138 
140  Vector getParams() const;
141 
144  ipReal64 getScaleX() const;
145  ipReal64 getScaleY() const;
147 
149  Matrix3d getInvHomogenousMatrix() const;
150 
152  Vector getInvParams() const;
153 
154 // attributes
155 protected:
157  ipReal64 _scaleX;
158 
160  ipReal64 _scaleY;
161 };
162 
165 
166 inline ipReal64
168 {
169  return _scaleX;
170 }
172 inline ipReal64
174 {
175  return _scaleY;
176 }
178 inline void
180 {
182 }
186 
187 } // end of namespace transform
188 } // end of namespace math
189 } // end of namespace ipsdk
190 
191 #pragma warning (pop)
192 
193 #endif // __IPSDKMATH_ANISOTROPICSCALE2D_H__
Main namespace for IPSDK library.
Definition: AlgorithmFunctionEfficiency.h:22
ipReal64 getScaleY() const
retrieve parameters associated to transformation
Definition: AnisotropicScale2d.h:177
static Vector getIdentityParams()
retrieve identity parameters for transformation
ipReal64 _scaleX
transformation scale along x axis
Definition: AnisotropicScale2d.h:161
Transformation class allowing to manage 2d anisotropic scale transformations.
double ipReal64
Base types definition.
Definition: BaseTypes.h:57
IPSDKGEOMETRY_API bool apply(const BaseGeometryTransform2d &transform, BaseGeometryEntity2d &entity)
function allowing to apply in situ a given transformation on an entity
void setParams(const ipReal64 scaleX, const ipReal64 scaleY)
select parameters associated to transformation
Definition: AnisotropicScale2d.h:122
boost::numeric::ublas::vector< ipReal64 > Vector
vector type associated to library
Definition: LinearAlgebraTypes.h:36
#define IPSDKMATH_API
Import/Export macro for library IPSDKMath.
Definition: IPSDKMathExports.h:27
boost::numeric::ublas::bounded_matrix< ipReal64, 3, 3 > Matrix3d
3d matrix (3x3) type associated to library
Definition: LinearAlgebraTypes.h:54
ipReal64 _scaleY
transformation scale along y axis
Definition: AnisotropicScale2d.h:164
Definition: AnisotropicScale2d.h:33
Base class for linear geometric transformation 2d management.
Definition: BaseLinearGeometricTransform2d.h:27
#define IPSDK_ENUM(enumTypeStr, enumSeq)
macro allowing to declare an enumerate for library
Definition: EnumMacros.h:26
eTransformParams
Definition: AnisotropicScale2d.h:40
ipReal64 getScaleX() const
retrieve parameters associated to transformation
Definition: AnisotropicScale2d.h:171
#define IPSDK_DECLARE_TRANSFORM2D(className)
macro allowing to declare a geometric transformation 2d
Definition: Transform2dHdrMacros.h:55
void setIdentity()
set transformation parameters to identity
Definition: AnisotropicScale2d.h:183