9 #include "imstkRbdConstraint.h" 11 using namespace imstk;
22 std::shared_ptr<RigidBody> obj,
25 const double beta = 0.05) :
RbdConstraint(obj,
nullptr, Side::A),
40 J = Eigen::Matrix<double, 3, 4>::Zero();
41 if ((m_side == Side::AB || m_side == Side::A) && !m_obj1->m_isStatic)
44 const Vec3d diff = m_obj1->getPosition() - m_axesPt;
45 const Vec3d perpDisplacement = diff - m_axesDir.dot(diff) * m_axesDir;
46 const double displacement = perpDisplacement.norm();
47 if (displacement != 0)
49 const Vec3d displacementDir = perpDisplacement / displacement;
50 vu = displacement * m_beta / dt;
53 J(0, 0) = -displacementDir[0]; J(0, 1) = 0.0;
54 J(1, 0) = -displacementDir[1]; J(1, 1) = 0.0;
55 J(2, 0) = -displacementDir[2]; J(2, 1) = 0.0;
Abstract class for rigid body constraints. A RbdConstraint should mainly provide a constraint jacobia...
Constrains the body center of mass to a fixed axes.
void compute(double dt) override
Compute constraint jacobian.