Klamp't  0.8.1
Mass.h
1 #ifndef OBJECT_MASS_H
2 #define OBJECT_MASS_H
3 
4 #include <KrisLibrary/geometry/AnyGeometry.h>
5 using namespace Math3D;
6 
9 
12 Vector3 CenterOfMass(const Meshing::TriMesh& mesh);
14 Vector3 CenterOfMass(const Meshing::PointCloud3D& pc);
17 Vector3 CenterOfMass(const Meshing::VolumeGrid& grid);
19 Vector3 CenterOfMass(const Geometry::AnyGeometry3D& geom);
20 
22 Matrix3 Covariance(const Meshing::TriMesh& mesh,const Vector3& center);
23 Matrix3 Covariance(const Meshing::PointCloud3D& pc,const Vector3& center);
24 Matrix3 Covariance(const Meshing::VolumeGrid& vol,const Vector3& center);
25 Matrix3 Covariance(const Geometry::AnyGeometry3D& geom,const Vector3& center);
26 inline Matrix3 Covariance(const Meshing::TriMesh& mesh) { return Covariance(mesh,CenterOfMass(mesh)); }
27 inline Matrix3 Covariance(const Meshing::PointCloud3D& mesh) { return Covariance(mesh,CenterOfMass(mesh)); }
28 inline Matrix3 Covariance(const Meshing::VolumeGrid& mesh) { return Covariance(mesh,CenterOfMass(mesh)); }
29 inline Matrix3 Covariance(const Geometry::AnyGeometry3D& mesh) { return Covariance(mesh,CenterOfMass(mesh)); }
30 
32 Matrix3 Inertia(const Meshing::TriMesh& mesh,const Vector3& center,Real mass);
33 Matrix3 Inertia(const Meshing::PointCloud3D& mesh,const Vector3& center,Real mass);
34 Matrix3 Inertia(const Meshing::VolumeGrid& mesh,const Vector3& center,Real mass);
35 Matrix3 Inertia(const Geometry::AnyGeometry3D& mesh,const Vector3& center,Real mass);
36 inline Matrix3 Inertia(const Meshing::TriMesh& mesh,Real mass) { return Inertia(mesh,CenterOfMass(mesh),mass); }
37 inline Matrix3 Inertia(const Meshing::PointCloud3D& mesh,Real mass) { return Inertia(mesh,CenterOfMass(mesh),mass); }
38 inline Matrix3 Inertia(const Meshing::VolumeGrid& mesh,Real mass) { return Inertia(mesh,CenterOfMass(mesh),mass); }
39 inline Matrix3 Inertia(const Geometry::AnyGeometry3D& mesh,Real mass) { return Inertia(mesh,CenterOfMass(mesh),mass); }
40 
43 Vector3 CenterOfMass_Solid(const Meshing::TriMesh& mesh,Real gridRes);
46 Matrix3 Covariance_Solid(const Meshing::TriMesh& mesh,Real gridRes,const Vector3& center);
47 inline Matrix3 Covariance_Solid(const Meshing::TriMesh& mesh,Real gridRes)
48 {
49  return Covariance_Solid(mesh,gridRes,CenterOfMass_Solid(mesh,gridRes));
50 }
53 Matrix3 Inertia_Solid(const Meshing::TriMesh& mesh,Real gridRes,const Vector3& center,Real mass);
54 inline Matrix3 Inertia_Solid(const Meshing::TriMesh& mesh,Real gridRes,Real mass)
55 {
56  return Inertia_Solid(mesh,gridRes,CenterOfMass_Solid(mesh,gridRes),mass);
57 }
58 
61 #endif
Matrix3 Inertia(const Meshing::TriMesh &mesh, const Vector3 &center, Real mass)
Computes the inertia tensor by integrating over the mesh.
Vector3 CenterOfMass_Solid(const Meshing::TriMesh &mesh, Real gridRes)
Vector3 CenterOfMass(const Meshing::TriMesh &mesh)
Matrix3 Covariance(const Meshing::TriMesh &mesh, const Vector3 &center)
Computes the second moment integrated over the geometry.
Matrix3 Covariance_Solid(const Meshing::TriMesh &mesh, Real gridRes, const Vector3 &center)
Matrix3 Inertia_Solid(const Meshing::TriMesh &mesh, Real gridRes, const Vector3 &center, Real mass)