Dart Documentationbox2d_htmlTimeOfImpactSolverManifold

TimeOfImpactSolverManifold class

class TimeOfImpactSolverManifold {
  final Vector normal;
  final Vector point;
  num separation;

  /** Pooling */
  final Vector pointA;
  final Vector pointB;
  final Vector temp;
  final Vector planePoint;
  final Vector clipPoint;

  /** constructor that initiliazes everything. */
  TimeOfImpactSolverManifold() :
    normal = new Vector(),
    point = new Vector(),
    separation = 0,
    pointA = new Vector(),
    pointB = new Vector(),
    temp = new Vector(),
    planePoint = new Vector(),
    clipPoint = new Vector() { }

  void initialize(TimeOfImpactConstraint cc, int index) {
    assert(cc.pointCount > 0);

    switch (cc.type) {
      case ManifoldType.CIRCLES:
        pointA.setFrom(cc.bodyA.getWorldPoint(cc.localPoint));
        pointB.setFrom(cc.bodyB.getWorldPoint(cc.localPoints[0]));
        if (MathBox.distanceSquared(pointA, pointB) > Settings.EPSILON
            * Settings.EPSILON) {
          normal.setFrom(pointB).subLocal(pointA);
          normal.normalize();
        } else {
          normal.setCoords(1, 0);
        }

        point.setFrom(pointA).addLocal(pointB).mulLocal(.5);
        temp.setFrom(pointB).subLocal(pointA);
        separation = Vector.dot(temp, normal) - cc.radius;
        break;

      case ManifoldType.FACE_A:
        normal.setFrom(cc.bodyA.getWorldVector(cc.localNormal));
        planePoint.setFrom(cc.bodyA.getWorldPoint(cc.localPoint));

        clipPoint.setFrom(cc.bodyB.getWorldPoint(cc.localPoints[index]));
        temp.setFrom(clipPoint).subLocal(planePoint);
        separation = Vector.dot(temp, normal) - cc.radius;
        point.setFrom(clipPoint);
        break;

      case ManifoldType.FACE_B:
        normal.setFrom(cc.bodyB.getWorldVector(cc.localNormal));
        planePoint.setFrom(cc.bodyB.getWorldPoint(cc.localPoint));

        clipPoint.setFrom(cc.bodyA.getWorldPoint(cc.localPoints[index]));
        temp.setFrom(clipPoint).subLocal(planePoint);
        separation = Vector.dot(temp, normal) - cc.radius;
        point.setFrom(clipPoint);

        // Ensure normal points from A to B
        normal.negateLocal();
        break;
    }
  }
}

Constructors

new TimeOfImpactSolverManifold() #

constructor that initiliazes everything.

TimeOfImpactSolverManifold() :
  normal = new Vector(),
  point = new Vector(),
  separation = 0,
  pointA = new Vector(),
  pointB = new Vector(),
  temp = new Vector(),
  planePoint = new Vector(),
  clipPoint = new Vector() { }

Properties

final Vector clipPoint #

final Vector clipPoint;

final Vector normal #

final Vector normal;

final Vector planePoint #

final Vector planePoint;

final Vector point #

final Vector point;

final Vector pointA #

Pooling

final Vector pointA;

final Vector pointB #

final Vector pointB;

final Type runtimeType #

inherited from Object

A representation of the runtime type of the object.

external Type get runtimeType;

num separation #

num separation;

final Vector temp #

final Vector temp;

Operators

bool operator ==(other) #

inherited from Object

The equality operator.

The default behavior for all Objects is to return true if and only if this and other are the same object.

If a subclass overrides the equality operator it should override the hashCode method as well to maintain consistency.

bool operator ==(other) => identical(this, other);

Methods

int hashCode() #

inherited from Object

Get a hash code for this object.

All objects have hash codes. Hash codes are guaranteed to be the same for objects that are equal when compared using the equality operator ==. Other than that there are no guarantees about the hash codes. They will not be consistent between runs and there are no distribution guarantees.

If a subclass overrides hashCode it should override the equality operator as well to maintain consistency.

external int hashCode();

void initialize(TimeOfImpactConstraint cc, int index) #

void initialize(TimeOfImpactConstraint cc, int index) {
  assert(cc.pointCount > 0);

  switch (cc.type) {
    case ManifoldType.CIRCLES:
      pointA.setFrom(cc.bodyA.getWorldPoint(cc.localPoint));
      pointB.setFrom(cc.bodyB.getWorldPoint(cc.localPoints[0]));
      if (MathBox.distanceSquared(pointA, pointB) > Settings.EPSILON
          * Settings.EPSILON) {
        normal.setFrom(pointB).subLocal(pointA);
        normal.normalize();
      } else {
        normal.setCoords(1, 0);
      }

      point.setFrom(pointA).addLocal(pointB).mulLocal(.5);
      temp.setFrom(pointB).subLocal(pointA);
      separation = Vector.dot(temp, normal) - cc.radius;
      break;

    case ManifoldType.FACE_A:
      normal.setFrom(cc.bodyA.getWorldVector(cc.localNormal));
      planePoint.setFrom(cc.bodyA.getWorldPoint(cc.localPoint));

      clipPoint.setFrom(cc.bodyB.getWorldPoint(cc.localPoints[index]));
      temp.setFrom(clipPoint).subLocal(planePoint);
      separation = Vector.dot(temp, normal) - cc.radius;
      point.setFrom(clipPoint);
      break;

    case ManifoldType.FACE_B:
      normal.setFrom(cc.bodyB.getWorldVector(cc.localNormal));
      planePoint.setFrom(cc.bodyB.getWorldPoint(cc.localPoint));

      clipPoint.setFrom(cc.bodyA.getWorldPoint(cc.localPoints[index]));
      temp.setFrom(clipPoint).subLocal(planePoint);
      separation = Vector.dot(temp, normal) - cc.radius;
      point.setFrom(clipPoint);

      // Ensure normal points from A to B
      normal.negateLocal();
      break;
  }
}

noSuchMethod(String name, List args) #

inherited from Object

noSuchMethod is invoked when users invoke a non-existant method on an object. The name of the method and the arguments of the invocation are passed to noSuchMethod. If noSuchMethod returns a value, that value becomes the result of the original invocation.

The default behavior of noSuchMethod is to throw a noSuchMethodError.

external Dynamic noSuchMethod(String name, List args);

const Object() #

inherited from Object

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.

const Object();

new TimeOfImpactSolverManifold() #

constructor that initiliazes everything.

TimeOfImpactSolverManifold() :
  normal = new Vector(),
  point = new Vector(),
  separation = 0,
  pointA = new Vector(),
  pointB = new Vector(),
  temp = new Vector(),
  planePoint = new Vector(),
  clipPoint = new Vector() { }

String toString() #

inherited from Object

Returns a string representation of this object.

external String toString();