C3D Toolkit  Kernel - 117982, Vision - 2.9.2.2

Inertial properties of solid. More...

#include <mip_solid_mass_inertia.h>

+ Collaboration diagram for InertiaProperties:

Public Member Functions

 InertiaProperties ()
 Constructor. More...
 
 InertiaProperties (const InertiaProperties &other)
 Copy constructor.
 
 ~InertiaProperties ()
 Destructor.
 
void Init ()
 Initialization. More...
 
bool CheckData ()
 Check data. More...
 
void CalculateIntegrals (const RPArray< MbFace > &faces, bool closed, double density, double deviateAngle, IfProgressIndicator *progress)
 Determine mass-inertial properties. More...
 
void CalculateProperties (const RPArray< MbFace > &faces, bool closed, double density, bool calculateAll, double deviateAngle, IfProgressIndicator *progress)
 Determine mass-inertial properties. More...
 
void CalculateIntegrals (const MbMesh &mesh, double density)
 Determine mass-inertial properties. More...
 
void CalculateProperties (const MbMesh &mesh, double density, bool calculateAll)
 Determine mass-inertial properties. More...
 
void GetIntegrals (const InertiaProperties &etalon)
 Calculate integrals of inertia. More...
 
void CrossIntegrals (const InertiaProperties &prop)
 Consider partially defined properties. More...
 
bool Calculate ()
 Calculate principal central coordinate system. More...
 
bool CalculateCenter (bool isCheckData=true)
 Calculate center of mass and central moments of inertia. More...
 
bool CalculateGeneral ()
 Calculate principal central moments of inertia. More...
 
void Transform (const MbMatrix3D &m)
 Transform. More...
 
void IntegralsTransform (const MbMatrix3D &m)
 Transform. More...
 
void Add (const InertiaProperties &)
 Add fields of other object to current.

 
void ChangeDensity (double density)
 Change density.
 
bool IsSame (const InertiaProperties &other, double accuracy) const
 Determine whether objects are equal.
 
void operator= (const InertiaProperties &)
 Assignment operator.
 

Public Attributes

double area
 Surface area.
 
double volume
 Volume.
 
double mass
 Mass.
 
double inertia [c3d::SPACE_DIM]
 Static moments.
 
double initial [c3d::SPACE_DIM][c3d::SPACE_DIM]
 Moments of inertia relative to source coordinate axes.
 
double moments [c3d::SPACE_DIM][c3d::SPACE_DIM]
 Moments of inertia relative to central coordinate axes.
 
double general [c3d::SPACE_DIM]
 Principal central moments of inertia.
 
MbCartPoint3D center
 Center of gravity.
 
MbVector3D direction [c3d::SPACE_DIM]
 Direction vectors of the principal central axes of inertia.
 

Detailed Description

Inertial properties of solid.

Inertial properties of solid. Vectors direction give directions of the principal axes of inertia.
If all principal moments of inertia (general[i] i=1,2,3) different, all vectors (direction[i] i=1,2,3) not zero.
If all principal moments of inertia (general[i] i=1,2,3) are the same, all vectors (direction[i] i=1,2,3) zero and principal directions can be any three mutually orthogonal vectors.
If two of the three principal moments of inertia are equal, for example (general[j]==general[k]), then two of the three vectors are zero (direction[j]=direction[k]=0), a non-zero vector (direction[i]) defines the direction of the principal axis of inertia, time general[i] with respect to which differs from other.

Constructor & Destructor Documentation

◆ InertiaProperties()

InertiaProperties::InertiaProperties ( )
inline

Constructor.

Constructor of inertial properties with default fields values.
Default values mean that the parameters are not set.

Member Function Documentation

◆ Init()

void InertiaProperties::Init ( )

Initialization.

Initialization of inertial properties with default fields values.
Default values mean that the parameters are not set.

◆ CheckData()

bool InertiaProperties::CheckData ( )

Check data.

Check data for correctness.

Returns
True if the data is correct,
data may be incorrect in case of zero surface area.

◆ CalculateIntegrals() [1/2]

void InertiaProperties::CalculateIntegrals ( const RPArray< MbFace > &  faces,
bool  closed,
double  density,
double  deviateAngle,
IfProgressIndicator progress 
)

Determine mass-inertial properties.

Determine mass-inertial properties of set of faces.
Each solid is represented by a set of faces, describing its surface. Determination of volume, center of mass and moments of inertia of the solid leads to the calculation of the volume integrals. By means of the divergence (Gauss-Ostrogradsky) theorem volume integrals of the solid are reduced to the integrals over the surfaces of the solid faces.
Numerical integration over the surface involves face parametric domain subdivision into small rectangular or triangular subdomains. Computational accuracy depends on sizes of subdomains. As driving parameter of integration domain partitioning used angular deviation of surface normal in 'deviateAngle' subdomain. Size of each subdomain is defined by condition: angular deviation of surface normal in subdomain shouldn't exceed deviateAngle.
For quadrangular subdomains integration by each surface parameter is performed using the Gauss quadratures. For triangular subdomains it is handy to transform u and v coordinates to three barycentric coordinates a, b, c, constructed by points pa, pb, pc. Coordinates of arbitrary point p=(u,v) has corresponding barycentric notation:
u = a ua + b ub + c uc,
v = a va + b vb + c vc.
Barycentric coordinates satisfy the equation: a + b + c = 1.
In all cases each surface integral is calculated as weighted summ of integrable function values inside integration domain. Calculation is performed in local coordinate system for each particular solid. Then solid properties are transformed to global coordinate system and summarized. Result is solids assembly properties in global, central and principal central coordinate system.

Note
In multithreaded mode m_Items runs in parallel (temporarily: multithreading is working only if IfProgressIndicator is not defined).
Parameters
[in]faces- A set of faces.
[in]closed- Closing of set of faces.
[in]density- Density (closed == true) or mass per unit square (closed == false).
[in]deviateAngle- Tolerance - the angular deviation of surface or curve in the neighboring points on the region of numerical integration.
[in]progress- A run progress indicator.

◆ CalculateProperties() [1/2]

void InertiaProperties::CalculateProperties ( const RPArray< MbFace > &  faces,
bool  closed,
double  density,
bool  calculateAll,
double  deviateAngle,
IfProgressIndicator progress 
)

Determine mass-inertial properties.

Determine mass-inertial properties of set of faces.

Parameters
[in]faces- A set of faces.
[in]closed- Closing of set of faces.
[in]density- Density (closed == true) or mass per unit square (closed == false).
[in]calculateAll- If false, then performs integrals of inertia calculation,
if true, then performs also calculation of center of mass, central moments of inertia, principal central moments of inertia.
[in]deviateAngle- Tolerance - the angular deviation of surface or curve in the neighboring points on the region of numerical integration.
[in]progress- A run progress indicator.

◆ CalculateIntegrals() [2/2]

void InertiaProperties::CalculateIntegrals ( const MbMesh mesh,
double  density 
)

Determine mass-inertial properties.

Determine mass-inertial properties of polygonal object.

Parameters
[in]mesh- A polygonal object.
[in]density- Density (closed == true) or mass per unit square (closed == false).

◆ CalculateProperties() [2/2]

void InertiaProperties::CalculateProperties ( const MbMesh mesh,
double  density,
bool  calculateAll 
)

Determine mass-inertial properties.

Determine mass-inertial properties of polygonal object.

Parameters
[in]mesh- A polygonal object.
[in]density- Density or mass per unit square.
[in]calculateAll- If false, then performs integrals of inertia calculation,
if true, then performs also calculation of center of mass, central moments of inertia, principal central moments of inertia.

◆ GetIntegrals()

void InertiaProperties::GetIntegrals ( const InertiaProperties etalon)

Calculate integrals of inertia.

Calculate integrals of inertia by user-given moments of inertia.
Assigns the values of area, volume, mass, reference center of mass, recalculates moments of inertia relative to central coordinate axes by given reference moments of inertia.

Parameters
[in]etalon- Reference.

◆ CrossIntegrals()

void InertiaProperties::CrossIntegrals ( const InertiaProperties prop)

Consider partially defined properties.

Recalculate integrals of inertia with user-given partially defined moments of inertia.
Assigns the values of area, volume, mass, reference center of mass, moments of inertia, if reference values are defined.
Area, volume, mass, center of mass, moments of inertia of an object are not changed if corresponding reference values are not defined.

Parameters
[in]prop- Partially defined inertial properties.

◆ Calculate()

bool InertiaProperties::Calculate ( )

Calculate principal central coordinate system.

Calculation and checking of principal central coordinate system.
Included: calculation of center of mass and central moments of inertia, calculation of principal central moments of inertia.

Returns
True if data is correct.

◆ CalculateCenter()

bool InertiaProperties::CalculateCenter ( bool  isCheckData = true)

Calculate center of mass and central moments of inertia.

Calculate center of mass and central moments of inertia.

Returns
True if data is correct.

◆ CalculateGeneral()

bool InertiaProperties::CalculateGeneral ( )

Calculate principal central moments of inertia.

Calculate principal central moments of inertia.

Returns
True if data is correct.

◆ Transform()

void InertiaProperties::Transform ( const MbMatrix3D m)

Transform.

Transform data by matrix.

Parameters
[in]m- Transformation matrix.

◆ IntegralsTransform()

void InertiaProperties::IntegralsTransform ( const MbMatrix3D m)

Transform.

Transform integrals of inertia according to matrix.

Parameters
[in]m- Transformation matrix.

The documentation for this class was generated from the following file: