void ofxPhysics2d::update(float timeStep){
	numParticles = particles.size();
	numConstraints = constraints.size();
	if(bGravity){
		for(int i=0; i<numParticles; i++){
			particles[i]->applyImpulse(gravity);	
		}
	}
	for(int i=0; i<numParticles; i++){
		particles[i]->updateParticle(timeStep);
	}
	
	ofxCollisionSolverBase& collisionSolverRef = *collisionSolver;
	for(int n=0; n<numIterations; n++){
		for(int i=0; i<numConstraints; i++){
			constraints[i]->update();
		}
		if(bCollisions){
			collisionSolverRef.solve(particles);
		}
		if(bCheckBounds){
			boundsConstrain();
		}
	}
}
void ofxPhysics3d::update(float timeStep){
	numConstraints = constraints.size();
	if(bGravity){
		for(int i=0; i<particles.size(); i++){
			particles[i]->applyImpulse(gravity);	
		}
	}
	for(int i=0; i<particles.size(); i++){
		particles[i]->updateParticle(timeStep);
	}
	for(int n=0; n<numIterations; n++){
		for(int i=0; i<numConstraints; i++){
			constraints[i]->update();
		}
		if(bCheckBounds){
			boundsConstrain();
		}
	}
	if(bCollisions) collisionSolver->solve(particles, numIterations);
}