Dart Documentationsystem_verletConstraint_Distance

Constraint_Distance class

class Constraint_Distance implements Constraint {
 final Segment segment;
 double stiffness;
 double _distance2;
 Vector3 _stick = new Vector3.zero();

 Constraint_Distance(this.segment, this.stiffness) {
   _distance2 = (segment.ps.position3d[segment.i1] - segment.ps.position3d[segment.i2]).length;
 }

 factory Constraint_Distance.fromParticles(ps, i1, i2, stiffness, [collide = 0]) {
   return new   Constraint_Distance(new Segment(ps, i1, i2, collide), stiffness);
 }

 //get a => segment.ps.position3d[segment.i1];
 //get b => segment.ps.position3d[segment.i2];

 relax(stepCoef) {
   var a = segment.ps.position3d[segment.i1];
   var b = segment.ps.position3d[segment.i2];
   _stick.setFrom(a).sub(b);
   var l = _stick.length;
   var diff = ( _distance2 - l)/l;
   _stick.scale(diff *  stiffness * stepCoef);
   var ma = segment.ps.mass[segment.i1];
   var mb = segment.ps.mass[segment.i2];
   var mw = (ma + mb);// * stiffness;
   a.add(_stick.scale(ma / mw));
   b.sub(_stick.scale(mb / ma)); // _stick(mb / mw)
 }
}

Implements

Constraint

Constructors

new Constraint_Distance(Segment segment, double stiffness) #

Creates a new Object instance.

Object instances have no meaningful state, and are only useful through their identity. An Object instance is equal to itself only.

docs inherited from Object
Constraint_Distance(this.segment, this.stiffness) {
 _distance2 = (segment.ps.position3d[segment.i1] - segment.ps.position3d[segment.i2]).length;
}

factory Constraint_Distance.fromParticles(ps, i1, i2, stiffness, [collide = 0]) #

factory Constraint_Distance.fromParticles(ps, i1, i2, stiffness, [collide = 0]) {
 return new   Constraint_Distance(new Segment(ps, i1, i2, collide), stiffness);
}

Properties

final Segment segment #

final Segment segment

double stiffness #

double stiffness

Methods

dynamic relax(stepCoef) #

relax(stepCoef) {
 var a = segment.ps.position3d[segment.i1];
 var b = segment.ps.position3d[segment.i2];
 _stick.setFrom(a).sub(b);
 var l = _stick.length;
 var diff = ( _distance2 - l)/l;
 _stick.scale(diff *  stiffness * stepCoef);
 var ma = segment.ps.mass[segment.i1];
 var mb = segment.ps.mass[segment.i2];
 var mw = (ma + mb);// * stiffness;
 a.add(_stick.scale(ma / mw));
 b.sub(_stick.scale(mb / ma)); // _stick(mb / mw)
}