7 #include "imstkPbdCollisionConstraint.h" 11 PbdCollisionConstraint::PbdCollisionConstraint(
const int numParticlesA,
const int numParticlesB) :
12 PbdConstraint(numParticlesA + numParticlesB)
14 m_bodiesSides.resize(numParticlesA + numParticlesB);
15 for (
size_t i = 0; i < m_bodiesSides.size(); i++)
17 m_bodiesSides[i] = (i >=
static_cast<size_t>(numParticlesA));
30 bool update = this->computeValueAndGradient(bodies, c, m_dcdx);
39 for (
size_t i = 0; i < m_particles.size(); i++)
41 const double invMass = bodies.getInvMass(m_particles[i]);
44 lambda += invMass * m_dcdx[i].squaredNorm();
55 for (
size_t i = 0; i < m_particles.size(); i++)
57 const double invMass = bodies.getInvMass(m_particles[i]);
60 const Vec3d dx = invMass * lambda *
61 m_dcdx[i] * m_stiffness[m_bodiesSides[i]];
62 bodies.getPosition(m_particles[i]) += dx;
void projectConstraint(PbdState &bodies, const double dt, const SolverType &type) override
Performs the actual positional solve.
SolverType
Type of solvers.
Provides interface for accessing particles from a 2d array of PbdBody,Particles.