anchor.diff:          var position3d = ps.position3d[i];
           var position3dPrevious = ps.position3dPrevious[i];
           // calculate velocity
  -        deplacement.setFrom(position3d).sub(position3dPrevious).scale(timeScale * ps.inertia[i]);
  -
  -//        // ground friction
  -//        if (particles[i].pos.y >= this.height-1 && velocity.length2() > 0.000001) {
  -//          var m = velocity.length();
  -//          velocity.x /= m;
  -//          velocity.y /= m;
  -//          velocity.mutableScale(m*this.groundFriction);
  -//        }
  -
  -        accs.setFrom(globalAccs);
  -        accs.add(ps.acc[i]);
  +        _motion.setFrom(position3d).sub(position3dPrevious).scale(timeScale * ps.inertia[i]);
  +        _accs.setFrom(globalAccs);
  +        _accs.add(ps.acc[i]);
           // Position Verlet integration
  -        accs.scale(timestep2);
  -        deplacement.add(accs);
  +        _accs.scale(timestep2);
  +        _motion.add(_accs);
           // follow http://lolengine.net/blog/2011/12/14/understanding-motion-in-games
           // Velocity Verlet integration
           // vec3 OldVel = Vel;
  
positive.code:         // Pos = Pos + (OldVel + Vel) * 0.5 * dt;
          // Pos = Pos + (2 * OldVel + Accel * dt) * 0.5 * dt;
          //forces.scale(_timestep1);
          //deplacement.scale(2.0).add(forces).scale(0.5 * _timestep1);
  
  
          // save last good state
          // TODO optim : store future pos in previous and swap previous (with future) and current values in one swap (swap the list), but this optimisation will break existing code that keep vector of position (eg constraint)
          position3dPrevious.setFrom(position3d);
          position3d.add(deplacement);
        }
        collSpace.addParticles(ps);
      });
  
negative.code:   /// eg : gravity
    final globalAccs = new Vector3(0.0, 0.0, 0.0);
    collisions.Space collSpace;
    double _timestep = -1.0;
    final _motion = new Vector3.zero();
    final _accs = new Vector3.zero();
  
    System_Simulator({this.steps : 3, collisions.Space space0: null}) :
      super(Aspect.getAspectForAllOf([Particles])),
      collSpace = (space0 != null)? space0 : new collisions.Space_Noop()
      ;
  
  