Marine systems simulation
Loading...
Searching...
No Matches
CRigidBody.h
1#ifndef C_RigidBody_H
2#define C_RigidBody_H
3
4#include "SimObject.h"
5
6#include <Eigen/Eigen>
7namespace environment
8{
9class EnvironmentProvider;
10
11}
12namespace rigidbody
13{
14typedef Eigen::Matrix<double, 6, 6> mat6;
15typedef Eigen::Matrix<double, 6, 1> vec6;
16typedef Eigen::Matrix<double, 3, 3> mat3;
17typedef Eigen::Matrix<double, 3, 1> vec3;
18typedef Eigen::Matrix<double, 13, 1> vec13;
19typedef Eigen::Quaternion<double> quat;
20
22{
23 public:
24 virtual ~CRigidBody(){};
25
26 // r: global
27 // q: global
28 // dX: bodylocal
29 // return: bodylocal
30 virtual vec6 GetInternalForces(const vec6& dX, const vec3& r, const quat& q, environment::EnvironmentProvider* environment, double time, const double* states) = 0;
31
32 // return: bodylocal
33 virtual mat6 GetInertiaMatrix(const vec3& r, double time, const double* states, environment::EnvironmentProvider* environment) = 0;
34
35 // all global coords
36 vec13 GetSecondDerivative(const vec3& r, const quat& q, const vec3& v, const vec3 w, const vec6& externalForces, environment::EnvironmentProvider* environment, double time, const double* states);
37
38 // bodylocal coords
39 static vec6 GetCoriolisForce(const vec6& dX, const mat6& Inertia);
40
41
42#ifdef FH_VISUALIZATION
43 virtual void DrawBody(Ogre::SceneNode* renderNode, Ogre::SceneManager* sceneMgr) = 0;
44#endif
45
46 //static mat6 reorientInertiaRotateTranslate(const mat6& Inertia, const vec6& orientation);
47 static mat6 ReorientInertiaTranslateRotate(const mat6& Inertia, const vec6& orientation);
48 static mat3 MakeDyadic(const vec3& vector);
49 static mat3 GetRotation(const vec3& angle);
50 static mat6 GetRotation6(const vec3& angle);
51};
52}; // namespace rigidbody
53#endif
Definition CRigidBody.h:22