Program Listing for File VolumeIntegration.h
↰ Return to documentation for file (Utils/VolumeIntegration.h)
#ifndef __VOLUME_INTEGRATION_H__
#define __VOLUME_INTEGRATION_H__
#include <vector>
#include <string>
#include <iostream>
#include "Common/Common.h"
namespace Utilities
{
class VolumeIntegration
{
private:
int A;
int B;
int C;
// projection integrals
Real P1, Pa, Pb, Paa, Pab, Pbb, Paaa, Paab, Pabb, Pbbb;
// face integrals
Real Fa, Fb, Fc, Faa, Fbb, Fcc, Faaa, Fbbb, Fccc, Faab, Fbbc, Fcca;
// volume integrals
Real T0;
Real T1[3];
Real T2[3];
Real TP[3];
public:
VolumeIntegration(const unsigned int nVertices, const unsigned int nFaces, Vector3r * const vertices, const unsigned int* indices);
void compute_inertia_tensor(Real density);
Real getMass() const { return m_mass; }
Real getVolume() const { return m_volume; }
Matrix3r const& getInertia() const { return m_theta; }
Vector3r const& getCenterOfMass() const { return m_r; }
private:
void volume_integrals();
void face_integrals(unsigned int i);
void projection_integrals(unsigned int i);
std::vector<Vector3r> m_face_normals;
std::vector<Real> m_weights;
unsigned int m_nVertices;
unsigned int m_nFaces;
std::vector<Vector3r> m_vertices;
const unsigned int* m_indices;
Real m_mass, m_volume;
Vector3r m_r;
Vector3r m_x;
Matrix3r m_theta;
};
}
#endif