71 lines
1.5 KiB
C++
71 lines
1.5 KiB
C++
#ifndef INERTIATENSORS_H
|
|
#define INERTIATENSORS_H
|
|
|
|
#include "utils/math/MathTypes.h"
|
|
|
|
namespace model
|
|
{
|
|
|
|
/**
|
|
* @brief The InertiaTensors class provides a collection of methods to
|
|
* deliver some common inertia tensors centered about the center of mass
|
|
*/
|
|
class InertiaTensors
|
|
{
|
|
public:
|
|
|
|
/**
|
|
* @brief SolidSphere
|
|
* @param radius (meters)
|
|
* @return
|
|
*/
|
|
static Matrix3 SolidSphere(double radius)
|
|
{
|
|
double xx = 0.4*radius*radius;
|
|
double yy = xx;
|
|
double zz = xx;
|
|
return Matrix3{{xx, 0, 0},
|
|
{0, yy, 0},
|
|
{0, 0, zz}};
|
|
}
|
|
|
|
/**
|
|
* @brief HollowSphere
|
|
* @param radius (meters)
|
|
* @return
|
|
*/
|
|
static Matrix3 HollowSphere(double radius)
|
|
{
|
|
double xx = (2.0/3.0)*radius*radius;
|
|
double yy = xx;
|
|
double zz = xx;
|
|
return Matrix3{{xx, 0, 0},
|
|
{0, yy, 0},
|
|
{0, 0, zz}};
|
|
}
|
|
|
|
/**
|
|
* @brief Tube - The longitudinal axis is the z-axis. Can also be used for a solid cylinder
|
|
* when innerRadius = 0.0
|
|
* @param innerRadius (meters)
|
|
* @param outerRadius (meters)
|
|
* @param length (meters)
|
|
* @return
|
|
*/
|
|
static Matrix3 Tube(double innerRadius, double outerRadius, double length)
|
|
{
|
|
double xx = (1.0/12.0)*(3.0*(innerRadius*innerRadius + outerRadius*outerRadius) + length*length);
|
|
double yy = xx;
|
|
double zz = (1.0/2.0)*(innerRadius*innerRadius + outerRadius*outerRadius);
|
|
return Matrix3{{xx, 0.0, 0.0},
|
|
{0.0, yy, 0.0},
|
|
{0.0, 0.0, zz}};
|
|
|
|
}
|
|
|
|
};
|
|
|
|
}
|
|
|
|
#endif // INERTIATENSORS_H
|