Marine systems simulation
eigen_matrix_defs.h
1#pragma once
2
3#include "Eigen/Eigen"
4#include "Eigen/Sparse"
5
6namespace CoRiBoDynamics{
7
8typedef Eigen::Matrix<double,3,1> vec3;
9typedef Eigen::Matrix<double,2,1> vec2;
10typedef Eigen::Matrix<double,4,1> vec4;
11typedef Eigen::Matrix<double,6,1> vec6;
12
13typedef Eigen::Quaternion<double> Quat;
14
15typedef Eigen::Matrix<double,2,2> mat2;
16typedef Eigen::Matrix<double,3,3> mat3;
17typedef Eigen::Matrix<double,4,4> mat4;
18typedef Eigen::Matrix<double,6,6> mat6;
19
20typedef Eigen::Matrix<double,2,4,Eigen::RowMajor> mat24;
21typedef Eigen::Matrix<double,3,2,Eigen::RowMajor> mat32;
22typedef Eigen::Matrix<double,3,4,Eigen::RowMajor> mat34;
23typedef Eigen::Matrix<double,3,6,Eigen::RowMajor> mat36;
24
25typedef Eigen::Matrix<double,2,3,Eigen::ColMajor> mat23;
26typedef Eigen::Matrix<double,4,2,Eigen::ColMajor> mat42;
27typedef Eigen::Matrix<double,4,3,Eigen::ColMajor> mat43;
28typedef Eigen::Matrix<double,6,3,Eigen::ColMajor> mat63;
29
30typedef Eigen::SparseMatrix<double,Eigen::ColMajor> SparseMat;
31typedef Eigen::Matrix<double,Eigen::Dynamic,1> Vector;
32typedef Eigen::SparseMatrix<double,Eigen::RowMajor> SparseRowMat;
33
34Quat ptrQ(const double* Q);
35Quat dblQ(double d);
36void Qptr(const Quat& Q, double* ptr);
37void V2ptr(const vec2& V, double* ptr);
38void V3ptr(const vec3& V, double* ptr);
39void V4ptr(const vec4& V, double* ptr);
40void V6ptr(const vec6& V, double* ptr);
41
42mat3 dyadicX(const vec3& V);
43mat3 dyadicXX(const vec3& V);
44mat3 dyadicXaXb(const vec3& Va, const vec3& Vb);
45mat3 outer(const vec3& V);
46mat3 outer(const vec3& Va, const vec3& Vb);
47
48void RotateDiagonalMatrix(const mat3& R, const vec6& D, mat6& M);
49void TranslateRotateDiagonalMatrix(const mat3& R, const vec3& r, const vec6& D, mat6& M);
50Quat BasicRotationX(double angle);
51Quat BasicRotationY(double angle);
52Quat BasicRotationZ(double angle);
53
54bool is_qNaN(double v);
55
56static const Quat RotationX_plus90 = Quat(0.70710678118654752, 0.70710678118654752,0,0);
57static const Quat RotationY_plus90 = Quat(0.70710678118654752,0, 0.70710678118654752,0);
58static const Quat RotationZ_plus90 = Quat(0.70710678118654752,0,0, 0.70710678118654752);
59static const Quat RotationX_minus90 = Quat(0.70710678118654752,-0.70710678118654752,0,0);
60static const Quat RotationY_minus90 = Quat(0.70710678118654752,0,-0.70710678118654752,0);
61static const Quat RotationZ_minus90 = Quat(0.70710678118654752,0,0,-0.70710678118654752);
62
63static const Quat RotationYpZm = Quat( 0.5,-0.5, 0.5,-0.5);
64
65static const Quat RotationX_180 = Quat(0,1,0,0);
66static const Quat RotationY_180 = Quat(0,0,1,0);
67static const Quat RotationZ_180 = Quat(0,0,0,1);
68
69
70}
Definition: CollisionManager.h:6
void V6ptr(const vec6 &V, double *ptr)
writes the vector to ptr
mat3 dyadicX(const vec3 &V)
writes the vector to ptr
void V3ptr(const vec3 &V, double *ptr)
writes the vector to ptr
Quat BasicRotationX(double angle)
local space origo translation and rotation of the given inertia matrix
void V2ptr(const vec2 &V, double *ptr)
writes the quaternion to ptr in w,x,y,z order
mat3 dyadicXX(const vec3 &V)
returns the 3x3 skew-symmetric cross product matrix associated with the vector V
void V4ptr(const vec4 &V, double *ptr)
writes the vector to ptr
void TranslateRotateDiagonalMatrix(const mat3 &R, const vec3 &r, const vec6 &D, mat6 &M)
Rotates the given diagonal matrix D, by the rotation matrix R. Writes result to M,...
mat3 dyadicXaXb(const vec3 &Va, const vec3 &Vb)
returns the square of the 3x3 skew-symmetric cross product matrix associated with the vector V
void RotateDiagonalMatrix(const mat3 &R, const vec6 &D, mat6 &M)
returns the outer product (Va * Vb^T) of the vectors Va and Vb
Quat dblQ(double d)
writes the quaternion from ptr in w,x,y,z order
mat3 outer(const vec3 &V)
returns the product of the two 3x3 skew-symmetric cross product matrices associated with the vectors ...
void Qptr(const Quat &Q, double *ptr)
returns the (d,d,d,d) quaternion