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),
26 m_beta(beta), m_fixedPt(fixedPt),
39 J = Eigen::Matrix<double, 3, 4>::Zero();
40 if ((m_side == Side::AB || m_side == Side::A) && !m_obj1->m_isStatic)
43 const Vec3d axes = (*m_q - m_obj1->getPosition()).normalized();
44 const Vec3d diff = m_fixedPt - m_obj1->getPosition();
45 const Vec3d rot = axes.cross(diff.normalized());
46 const Vec3d rotAxes = rot.normalized();
49 vu = rot.norm() * m_beta / dt;
50 J(0, 0) = 0.0; J(0, 1) = rotAxes[0];
51 J(1, 0) = 0.0; J(1, 1) = rotAxes[1];
52 J(2, 0) = 0.0; J(2, 1) = rotAxes[2];
Abstract class for rigid body constraints. A RbdConstraint should mainly provide a constraint jacobia...
void compute(double dt) override
Compute constraint jacobian.