7 #include "imstkRbdDistanceConstraint.h" 11 RbdDistanceConstraint::RbdDistanceConstraint(
12 std::shared_ptr<RigidBody> obj1,
13 std::shared_ptr<RigidBody> obj2,
14 const Vec3d& p1,
const Vec3d& p2,
16 const Side side) : RbdConstraint(obj1, obj2, side),
17 m_p1(p1), m_p2(p2), m_dist(dist)
24 J = Eigen::Matrix<double, 3, 4>::Zero();
25 if ((m_side == Side::AB || m_side == Side::A) && !m_obj1->m_isStatic)
28 const Vec3d r1 = m_p1 - m_obj1->getPosition();
29 const Vec3d diff = m_p2 - m_p1;
30 const Vec3d c = r1.cross(diff);
31 J(0, 0) = -diff[0];
J(0, 1) = -c[0];
32 J(1, 0) = -diff[1];
J(1, 1) = -c[1];
33 J(2, 0) = -diff[2];
J(2, 1) = -c[2];
35 if ((m_side == Side::AB || m_side == Side::B) && !m_obj2->m_isStatic)
37 const Vec3d r2 = m_p2 - m_obj2->getPosition();
38 const Vec3d diff = m_p2 - m_p1;
39 const Vec3d c = r2.cross(diff);
40 J(0, 0) = diff[0];
J(0, 1) = c[0];
41 J(1, 0) = diff[1];
J(1, 1) = c[1];
42 J(2, 0) = diff[2];
J(2, 1) = c[2];
void compute(double dt) override
Compute constraint jacobian.
Eigen::Matrix< double, 3, 4 > J
Jacobian, "vanish" to zero.