15 #ifndef __IPSDKMATH_SIMILARITY2D_H__ 16 #define __IPSDKMATH_SIMILARITY2D_H__ 20 #pragma warning (push) 21 #pragma warning (disable : 4251) 23 #include <IPSDKMath/Geometry/2d/Transform/BaseLinearGeometricTransform2d.h> 54 setParams(1, 0, 0, 0);
58 setParams(scale, theta, tx, ty);
67 static void transform(
const ipReal64 scale,
72 transform(scale, std::cos(theta), std::sin(theta), tx, ty, x, y);
74 static void transform(
const ipReal64 scale,
93 return getHomogenousMatrix(scale, std::cos(theta), std::sin(theta), tx, ty);
101 transform(0, 0), transform(0, 1),
102 transform(1, 0), transform(1, 1));
103 transform(0, 0) *= scale;
104 transform(0, 1) *= scale;
105 transform(1, 0) *= scale;
106 transform(1, 1) *= scale;
107 transform(0, 2) = tx;
108 transform(1, 2) = ty;
109 transform(2, 0) = 0; transform(2, 1) = 0; transform(2, 2) = 1;
122 invScale = 1 / scale;
123 const ipReal64 cosTheta = std::cos(theta);
124 const ipReal64 sinTheta = std::sin(theta);
125 const ipReal64 invTx = -(cosTheta*tx + sinTheta*ty) * invScale;
126 const ipReal64 invTy = -(-sinTheta*tx + cosTheta*ty) * invScale;
127 return getHomogenousMatrix(invScale, cosTheta, -sinTheta, invTx, invTy);
135 invScale = 1 / scale;
136 const ipReal64 cosTheta = std::cos(theta);
138 const ipReal64 invTx = -(cosTheta*tx + sinTheta*ty) * invScale;
139 const ipReal64 invTy = -(-sinTheta*tx + cosTheta*ty) * invScale;
147 static Vector getIdentityParams();
150 void setParams(
const ipReal64 scale,
156 _cosTheta = std::cos(_theta);
157 _sinTheta = std::sin(_theta);
165 void setParams(
const Vector& params);
182 Matrix3d getHomogenousMatrix()
const;
188 Matrix3d getInvHomogenousMatrix()
const;
191 Vector getInvParams()
const;
254 #pragma warning (pop) 256 #endif // __IPSDKMATH_SIMILARITY2D_H__ Main namespace for IPSDK library.
Definition: AlgorithmFunctionEfficiency.h:22
ipReal64 _scale
transformation scale
Definition: Similarity2d.h:202
IPSDK_FORCEINLINE void angleToMatrix(const T cosTheta, const T sinTheta, T &rxx, T &rxy, T &ryx, T &ryy)
Convertion from angle to rotation matrix.
Definition: Angles2d.h:80
ipReal64 _ty
translation coordinate along y axis
Definition: Similarity2d.h:217
ipReal64 _tx
translation coordinate along x axis
Definition: Similarity2d.h:214
void setParams(const ipReal64 scale, const ipReal64 theta, const ipReal64 tx, const ipReal64 ty)
select parameters associated to transformation
Definition: Similarity2d.h:156
static Matrix3d getHomogenousMatrix(const ipReal64 scale, const ipReal64 theta, const ipReal64 tx, const ipReal64 ty)
retrieve homogeneous matrix associated to transformation
Definition: Similarity2d.h:95
double ipReal64
Base types definition.
Definition: BaseTypes.h:57
Utility functions used to handle angles 2d.
Definition: Similarity2d.h:33
IPSDKGEOMETRY_API bool apply(const BaseGeometryTransform2d &transform, BaseGeometryEntity2d &entity)
function allowing to apply in situ a given transformation on an entity
boost::numeric::ublas::vector< ipReal64 > Vector
vector type associated to library
Definition: LinearAlgebraTypes.h:36
ipReal64 _theta
angle of rotation in radians
Definition: Similarity2d.h:205
static Vector getIdentityParams()
retrieve identity parameters for transformation
ipReal64 getScale() const
retrieve parameters associated to transformation
Definition: Similarity2d.h:224
#define IPSDKMATH_API
Import/Export macro for library IPSDKMath.
Definition: IPSDKMathExports.h:27
ipReal64 getTheta() const
retrieve parameters associated to transformation
Definition: Similarity2d.h:230
ipReal64 getTy() const
retrieve parameters associated to transformation
Definition: Similarity2d.h:242
Transformation class allowing to manage 2d similarity transformations.
boost::numeric::ublas::bounded_matrix< ipReal64, 3, 3 > Matrix3d
3d matrix (3x3) type associated to library
Definition: LinearAlgebraTypes.h:54
eTransformParams
Definition: Similarity2d.h:40
ipReal64 getTx() const
retrieve parameters associated to transformation
Definition: Similarity2d.h:236
void setIdentity()
set transformation parameters to identity
Definition: Similarity2d.h:248
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
IPSDK_FORCEINLINE void rotate2dInSitu(const ipReal64 cosTheta, const ipReal64 sinTheta, T &x, T &y)
rotation of a point using a rotation angle (rotation around origin)
Definition: Angles2d.h:156
#define IPSDK_DECLARE_TRANSFORM2D(className)
macro allowing to declare a geometric transformation 2d
Definition: Transform2dHdrMacros.h:55