Program Listing for File covariance_ellipsoid.hpp
↰ Return to documentation for file (include/ecl/statistics/covariance_ellipsoid.hpp
)
/*****************************************************************************
** Ifdefs
*****************************************************************************/
#ifndef ECL_STATISTICS_COVARIANCE_ELLIPSOID_HPP_
#define ECL_STATISTICS_COVARIANCE_ELLIPSOID_HPP_
/*****************************************************************************
** Includes
*****************************************************************************/
#include <cmath>
#include <ecl/linear_algebra.hpp>
#include <ecl/config/macros.hpp>
/*****************************************************************************
** Namespaces
*****************************************************************************/
namespace ecl {
/*****************************************************************************
** Interface [CovarianceEllipsoid]
*****************************************************************************/
template<typename T, int N>
class ECL_PUBLIC CovarianceEllipsoid {
private:
CovarianceEllipsoid() {};
virtual ~CovarianceEllipsoid() {};
};
/*****************************************************************************
** Interface [CovarianceEllipsoid2f]
*****************************************************************************/
template<>
class ECL_PUBLIC CovarianceEllipsoid<float,2> {
public:
CovarianceEllipsoid();
CovarianceEllipsoid(const ecl::linear_algebra::Matrix2f& M);
virtual ~CovarianceEllipsoid() {};
void compute(const ecl::linear_algebra::Matrix2f& M);
const ecl::linear_algebra::Vector2f& lengths() { return ellipse_lengths; }
const ecl::linear_algebra::Matrix2f& axes() { return ellipse_axes; }
double rotation();
ecl::linear_algebra::Vector2f intercepts();
EIGEN_MAKE_ALIGNED_OPERATOR_NEW
private:
ecl::linear_algebra::Vector2f ellipse_lengths;
ecl::linear_algebra::Matrix2f ellipse_axes;
};
template<>
class ECL_PUBLIC CovarianceEllipsoid<float,3> {
public:
CovarianceEllipsoid();
CovarianceEllipsoid(const ecl::linear_algebra::Matrix3f& M, const bool sort = true);
virtual ~CovarianceEllipsoid() {};
void compute(const ecl::linear_algebra::Matrix3f& M, const bool sort = true);
const ecl::linear_algebra::Vector3f& lengths() { return ellipse_lengths; }
const ecl::linear_algebra::Matrix3f& axes() { return ellipse_axes; }
EIGEN_MAKE_ALIGNED_OPERATOR_NEW
private:
ecl::linear_algebra::Vector3f ellipse_lengths;
ecl::linear_algebra::Matrix3f ellipse_axes;
};
/*****************************************************************************
** Interface [CovarianceEllipsoid2d]
*****************************************************************************/
template<>
class ECL_PUBLIC CovarianceEllipsoid<double,2> {
public:
CovarianceEllipsoid();
CovarianceEllipsoid(const ecl::linear_algebra::Matrix2d& M);
virtual ~CovarianceEllipsoid() {};
void compute(const ecl::linear_algebra::Matrix2d& M);
const ecl::linear_algebra::Vector2d& lengths() { return ellipse_lengths; }
const ecl::linear_algebra::Matrix2d& axes() { return ellipse_axes; }
double rotation();
ecl::linear_algebra::Vector2d intercepts();
EIGEN_MAKE_ALIGNED_OPERATOR_NEW
private:
ecl::linear_algebra::Vector2d ellipse_lengths;
ecl::linear_algebra::Matrix2d ellipse_axes;
};
template<>
class ECL_PUBLIC CovarianceEllipsoid<double,3> {
public:
CovarianceEllipsoid();
CovarianceEllipsoid(const ecl::linear_algebra::Matrix3d& M, const bool sort = true);
virtual ~CovarianceEllipsoid() {};
void compute(const ecl::linear_algebra::Matrix3d& M, const bool sort = true);
const ecl::linear_algebra::Vector3d& lengths() { return ellipse_lengths; }
const ecl::linear_algebra::Matrix3d& axes() { return ellipse_axes; }
EIGEN_MAKE_ALIGNED_OPERATOR_NEW
private:
ecl::linear_algebra::Vector3d ellipse_lengths;
ecl::linear_algebra::Matrix3d ellipse_axes;
};
/*****************************************************************************
** Convenience Typedefs
*****************************************************************************/
typedef CovarianceEllipsoid<float,2> CovarianceEllipsoid2f;
typedef CovarianceEllipsoid<double,2> CovarianceEllipsoid2d;
typedef CovarianceEllipsoid<float,3> CovarianceEllipsoid3f;
typedef CovarianceEllipsoid<double,3> CovarianceEllipsoid3d;
} // namespace ecl
#endif /* ECL_STATISTICS_COVARIANCE_ELLIPSOID_HPP_ */