Marine systems simulation
eigen_matrix_defs.h
1#pragma once
2
3#include "Eigen/Eigen"
4#include "Eigen/Sparse"
5
6namespace Fish{
7
8 typedef Eigen::Matrix<double,2,1> vec2;
9 typedef Eigen::Matrix<double,3,1> vec3;
10 typedef Eigen::Matrix<double,4,1> vec4;
11 typedef Eigen::Matrix<double,5,1> vec5;
12 typedef Eigen::Matrix<double,6,1> vec6;
13 typedef Eigen::Matrix<double,7,1> vec7;
14
15 typedef Eigen::Quaternion<double> Quat;
16
17 typedef Eigen::Matrix<double,2,2> mat2;
18 typedef Eigen::Matrix<double,3,3> mat3;
19 typedef Eigen::Matrix<double,4,4> mat4;
20 typedef Eigen::Matrix<double,6,6> mat6;
21
22 typedef Eigen::Matrix<double,2,4,Eigen::RowMajor> mat24;
23 typedef Eigen::Matrix<double,3,2,Eigen::RowMajor> mat32;
24 typedef Eigen::Matrix<double,3,4,Eigen::RowMajor> mat34;
25 typedef Eigen::Matrix<double,3,6,Eigen::RowMajor> mat36;
26 typedef Eigen::Matrix<double,3,8,Eigen::RowMajor> mat38;
27 typedef Eigen::Matrix<double,3,5,Eigen::RowMajor> mat35;
28
29 typedef Eigen::Matrix<double,2,3,Eigen::ColMajor> mat23;
30 typedef Eigen::Matrix<double,4,2,Eigen::ColMajor> mat42;
31 typedef Eigen::Matrix<double,4,3,Eigen::ColMajor> mat43;
32 typedef Eigen::Matrix<double,6,3,Eigen::ColMajor> mat63;
33
34
35
36 typedef Eigen::SparseMatrix<double,Eigen::ColMajor> SparseMat;
37 typedef Eigen::Matrix<double,Eigen::Dynamic,1> Vector;
38 typedef Eigen::SparseMatrix<double,Eigen::RowMajor> SparseRowMat;
39
40 Quat ptrQ(const double* Q);
41 Quat dblQ(double d);
42 void Qptr(const Quat& Q, double* ptr);
43 void V2ptr(const vec2& V, double* ptr);
44 void V3ptr(const vec3& V, double* ptr);
45 void V4ptr(const vec4& V, double* ptr);
46 void V6ptr(const vec6& V, double* ptr);
47
48 mat3 dyadicX(const vec3& V);
49 mat3 dyadicXX(const vec3& V);
50 mat3 dyadicXaXb(const vec3& Va, const vec3& Vb);
51 mat3 outer(const vec3& V);
52 mat3 outer(const vec3& Va, const vec3& Vb);
53
54 void RotateDiagonalMatrix(const mat3& R, const vec6& D, mat6& M);
55 void TranslateRotateDiagonalMatrix(const mat3& R, const vec3& r, const vec6& D, mat6& M);
56 Quat BasicRotationX(double angle);
57 Quat BasicRotationY(double angle);
58 Quat BasicRotationZ(double angle);
59
60 bool is_qNaN(double v);
61}
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