Numeric types and methods

numeric.h

This file defines a variety of numeric data types, and some numeric operations. The Eigen library is used as the underlying data types.

numeric datatypes

typedef Eigen::Vector2i Vec2i;
typedef Eigen::Vector2f Vec2f;
typedef Eigen::Vector3i Vec3i;
typedef Eigen::Vector3f Vec3f;
typedef Eigen::Vector3d Vec3;
typedef Eigen::Vector4i Vec4i;
typedef Eigen::Matrix<float, 6, 1> Vec6f;
typedef Eigen::Matrix<float, 9, 1> Vec9f;
typedef Eigen::Matrix<double, 9, 1> Vec9;

#if defined(ENV32BIT)
    typedef Eigen::Matrix<double, 2, 1, Eigen::DontAlign> Vec2;
    typedef Eigen::Matrix<float, 4, 1, Eigen::DontAlign> Vec4f;
    typedef Eigen::Matrix<double, 4, 1, Eigen::DontAlign> Vec4;
    typedef Eigen::Matrix<double, 6, 1, Eigen::DontAlign> Vec6;
    typedef Eigen::Matrix<float, 8, 1, Eigen::DontAlign> Vec8f;
    typedef Eigen::Matrix<double, 8, 1, Eigen::DontAlign> Vec8;
#else
    typedef Eigen::Vector2d Vec2;
    typedef Eigen::Vector4f Vec4f;
    typedef Eigen::Vector4d Vec4;
    typedef Eigen::Matrix<double, 6, 1> Vec6;
    typedef Eigen::Matrix<float, 8, 1> Vec8f;
    typedef Eigen::Matrix<double, 8, 1> Vec8;
#endif

typedef Eigen::Matrix2i Mat2i;
typedef Eigen::Matrix3i Mat3i;
typedef Eigen::Matrix3f Mat3f;
typedef Eigen::Matrix3d Mat3;

#if defined(ENV32BIT)
    typedef Eigen::Matrix<float, 2, 2, Eigen::DontAlign> Mat2f;
    typedef Eigen::Matrix<double, 2, 2, Eigen::DontAlign> Mat2;
    typedef Eigen::Matrix<int, 4, 4, Eigen::DontAlign> Mat4i;
    typedef Eigen::Matrix<float, 4, 4, Eigen::DontAlign> Mat4f;
    typedef Eigen::Matrix<double, 4, 4, Eigen::DontAlign> Mat4;
    typedef Eigen::Matrix<float, 3, 4, Eigen::DontAlign> Mat34f;
    typedef Eigen::Matrix<double, 3, 4, Eigen::DontAlign> Mat34;
#else
    typedef Eigen::Matrix2f Mat2f;
    typedef Eigen::Matrix2d Mat2;
    typedef Eigen::Matrix4i Mat4i;
    typedef Eigen::Matrix4f Mat4f;
    typedef Eigen::Matrix4d Mat4;
    typedef Eigen::Matrix<float, 3, 4> Mat34f;
    typedef Eigen::Matrix<double, 3, 4> Mat34;
#endif

//-- General purpose Matrix and Vector
typedef Eigen::Matrix<unsigned int, Eigen::Dynamic, 1> Vecu;
typedef Eigen::VectorXi Veci;
typedef Eigen::VectorXf Vecf;
typedef Eigen::VectorXd Vec;
typedef Eigen::Matrix<unsigned int, Eigen::Dynamic, Eigen::Dynamic> Matu;
typedef Eigen::MatrixXi Mati;
typedef Eigen::MatrixXf Matf;
typedef Eigen::MatrixXd Mat;
typedef Eigen::Matrix<float, 2, Eigen::Dynamic> Mat2Xf;
typedef Eigen::Matrix<float, Eigen::Dynamic, 2> MatX2f;
typedef Eigen::Matrix<float, 3, Eigen::Dynamic> Mat3Xf;
typedef Eigen::Matrix<float, 4, Eigen::Dynamic> Mat4Xf;
typedef Eigen::Matrix<float, 9, Eigen::Dynamic> Mat9Xf;
typedef Eigen::Matrix<double, 2, Eigen::Dynamic> Mat2X;
typedef Eigen::Matrix<double, 3, Eigen::Dynamic> Mat3X;
typedef Eigen::Matrix<double, 4, Eigen::Dynamic> Mat4X;
typedef Eigen::Matrix<double, 9, Eigen::Dynamic> Mat9X;

/// Quaternion type
typedef Eigen::Quaternion<double> Quaternion;
typedef Eigen::Quaternion<double> Quaternionf;

numeric methods

template<typename TMat, typename TVec>
TMat cross_product_matrix(const TVec& x);

method that computes the skew-symmetric cross product matrix from a vector.

template<typename T>
inline int qr(T M, T& R, T& Q);

method that computes the QR decomposition, , where is a orthogonal matrix, and is a upper triangular matrix.

template<typename T>
inline int rq(T M, T& R, T& Q)

method that compute the RQ decomposition, , where is a orthogonal matrix, and is a upper triangular matrix.

template <typename T>
T nullspace(Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic>* A,
            Eigen::Matrix<T, Eigen::Dynamic, 1>* x)

method that commputes the right nullspace with the minimum singular value, where .

template <typename T>
T Nullspace2(Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic> *A,
             Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic> *x1,
             Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic> *x2 )

method that commputes the right nullspace with the top two minimum singular values, where .

template <typename T>
void svd(Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic>* A,
         Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic>* U,
         Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic>* S,
         Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic>* V)

method that computes the SVD decomposition of matrix , where .