Math
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 .