1 #include <Geometry/Ellipse.hh>
3 #include <Base/Math/Vector2.hh>
18 const double rotAngleDeg,
19 const double centerX,
const double centerY)
25 double rotAngleRAD = rotAngleDeg*M_PI/180.0;
26 parametricTransform_[0][0] =
27 parametricTransform_[1][1] = cos(rotAngleRAD);
28 parametricTransform_[0][0] *= scaleX;
29 parametricTransform_[1][1] *= scaleY;
30 parametricTransform_[0][1] = -sin(rotAngleRAD)*scaleY;
31 parametricTransform_[1][0] = sin(rotAngleRAD)*scaleX;
32 cout<<parametricTransform_<<endl;
37 CalcImplicitFromParameteric_();
43 double &maxX,
double &maxY)
const
48 const double Ma = parametricTransform_[0][0];
49 const double Mb = parametricTransform_[1][0];
50 const double Mc = parametricTransform_[0][1];
51 const double Md = parametricTransform_[1][1];
56 ty[0] = atan(Md / Mb);
62 minX = minY = numeric_limits<double>::max();
67 for(
unsigned int i=0; i<2; i++){
68 double x = Ma*cos(tx[i])+Mc*sin(tx[i]);
69 double y = Mb*cos(ty[i])+Md*sin(ty[i]);
92 CalcImplicitFromParameteric_()
96 implicitForm_ = invParametricTransform.
Transpose()*invParametricTransform;
103 const double centerX,
const double centerY)
105 implicitForm_ = implicitForm;
107 CalcParametericFromImplicit_();
120 Sigma[0][0] = 1.0/(sigmaX*sigmaX);
121 Sigma[1][1] = 1.0/(sigmaY*sigmaY);
122 SetImplicit(Sigma, F, 0 , 0);
128 const double centerX,
const double centerY)
130 implicitForm_ = implicitForm;
135 CalcParametericFromImplicit_();
142 #define MYSGN(x) ((x<0) ? -1.0 : 1.0)
144 CalcParametericFromImplicit_()
148 double B = implicitForm_[0][1] * 2;
150 double p = implicitForm_[0][0] - implicitForm_[1][1];
153 double t = MYSGN(p)*sqrt(p*p + B*B);
158 double q = implicitForm_[0][0] + implicitForm_[1][1];
160 parametricTransform_[0][0] = sqrt( (t+p)/(t*(q+t)) );
161 parametricTransform_[0][1] = MYSGN(B*p)*sqrt( (t-p)/(t*(q+t)) );
162 parametricTransform_[1][0] = -MYSGN(B*p)*sqrt( (t-p)/(t*(q-t)) );
163 parametricTransform_[1][1] = sqrt( (t+p)/(t*(q-t)) );
164 parametricTransform_.TransposeIP();
166 parametricTransform_.SetZero();
167 parametricTransform_[0][0] = parametricTransform_[1][1] =
168 1.0/sqrt(implicitForm_[0][0]);
176 return parametricTransform_;
182 return implicitForm_;
void SetGaussianFilterRange(const double &sigmaX, const double &sigmaY, const double F=9.0)
Assumes ellipse to be a certain iso value line on a 2D gaussian without cross correlation (no rotatio...
int Invert(Matrix2x2< T > &result) const
analyticaly inverts matrix
BIAS::Matrix2x2< double > ReturnImplicitRepresentation() const
BIAS::Matrix2x2< double > ReturnParametricTransformation() const
Matrix2x2< T > Transpose() const
returns transposed matrix
void SetImplicit(const BIAS::Matrix2x2< double > &implicitForm, const double centerX, const double centerY)
Uses quadric represenation.
void CalculateAxisAlignedBoundingBox(double &minX, double &minY, double &maxX, double &maxY) const
void SetZero()
set the elements of this matrix to zero
void SetParametric(const double scaleX, const double scaleY, const double rotAngleDeg, const double centerX, const double centerY)
Initialisation via affine transformation.