7 #include "imstkRbdConstraint.h" 8 #include "imstkPointSet.h" 9 #include "imstkVecDataArray.h" 19 Vec3d centroid = Vec3d(0.0, 0.0, 0.0);
20 if (useBoundingBoxOrigin)
23 pointset->computeBoundingBox(min, max);
24 centroid = (min + max) * 0.5;
26 std::shared_ptr<VecDataArray<double, 3>> verticesPtr = pointset->getVertexPositions(Geometry::DataType::PreTransform);
28 for (
int i = 0; i < vertices.size(); i++)
30 const Vec3d r = vertices[i] - centroid;
31 results(0, 0) += r[1] * r[1] + r[2] * r[2];
32 results(1, 1) += r[0] * r[0] + r[2] * r[2];
33 results(2, 2) += r[0] * r[0] + r[1] * r[1];
34 results(1, 0) += -r[0] * r[1];
35 results(2, 0) += -r[0] * r[2];
36 results(2, 1) += -r[1] * r[2];
38 results(0, 2) = results(2, 0);
39 results(0, 1) = results(1, 0);
40 results(1, 2) = results(2, 1);
41 m_intertiaTensor = results * m_mass * scale;
void setInertiaFromPointSet(std::shared_ptr< PointSet > pointset, const double scale=1.0, const bool useBoundingBoxOrigin=true)
Convience function to set the inertia tensor based off provided geometry assuming uniform mass at eac...