7 #include "imstkPbdRigidBaryPointToPointConstraint.h" 11 PbdRigidBaryPointToPointConstraint::PbdRigidBaryPointToPointConstraint(std::shared_ptr<RigidBody> obj1) :
12 PbdBaryPointToPointConstraint(),
16 RbdConstraint::Side::A)
29 double& c, std::vector<Vec3d>& dcdx)
32 m_diff = 0.5 * computeInterpolantDifference(bodies);
36 if (c < IMSTK_DOUBLE_EPS)
38 m_diff = Vec3d::Zero();
43 for (
size_t i = 0; i < dcdx.size(); i++)
47 dcdx[i] = -m_diff * m_weights[i];
51 dcdx[i] = m_diff * m_weights[i];
61 J = Eigen::Matrix<double, 3, 4>::Zero();
63 J(0, 0) = -m_diff[0]; J(0, 1) = 0.0;
64 J(1, 0) = -m_diff[1]; J(1, 1) = 0.0;
65 J(2, 0) = -m_diff[2]; J(2, 1) = 0.0;
68 vu = m_diff.norm() * m_beta / dt;
bool computeValueAndGradient(PbdState &bodies, double &c, std::vector< Vec3d > &dcdx) override
Compute value and gradient of constraint function.
Provides interface for accessing particles from a 2d array of PbdBody,Particles.
void compute(double dt) override
Compute constraint jacobian.