Dart Documentationbox2d_consolePositionSolverManifold

PositionSolverManifold class

class PositionSolverManifold {
  Vector normal;
  Vector point;
  num separation;

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

  PositionSolverManifold() :
    normal = new Vector(),
    point = new Vector(),
    separation = 0,

    // Initialize pool variables.
    pointA = new Vector(),
    pointB = new Vector(),
    temp = new Vector(),
    planePoint = new Vector(),
    clipPoint = new Vector() { }

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

    switch (cc.type) {
      case ManifoldType.CIRCLES:
        cc.bodyA.getWorldPointToOut(cc.localPoint, pointA);
        cc.bodyB.getWorldPointToOut(cc.points[0].localPoint, pointB);
        if (MathBox.distanceSquared(pointA, pointB) >
            Settings.EPSILON * Settings.EPSILON){
          normal.setFrom(pointB).subLocal(pointA);
          normal.normalize();
        } else {
          normal.setCoords(1.0, 0.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:
        cc.bodyA.getWorldVectorToOut(cc.localNormal, normal);
        cc.bodyA.getWorldPointToOut(cc.localPoint, planePoint);

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

      case ManifoldType.FACE_B:
        cc.bodyB.getWorldVectorToOut(cc.localNormal, normal);
        cc.bodyB.getWorldPointToOut(cc.localPoint, planePoint);

        cc.bodyA.getWorldPointToOut(cc.points[index].localPoint, clipPoint);
        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 PositionSolverManifold() #

PositionSolverManifold() :
  normal = new Vector(),
  point = new Vector(),
  separation = 0,

  // Initialize pool variables.
  pointA = new Vector(),
  pointB = new Vector(),
  temp = new Vector(),
  planePoint = new Vector(),
  clipPoint = new Vector() { }

Properties

Vector clipPoint #

Vector clipPoint;

Vector normal #

Vector normal;

Vector planePoint #

Vector planePoint;

Vector point #

Vector point;

Vector pointA #

Pooling

Vector pointA;

Vector pointB #

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;

Vector temp #

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(ContactConstraint cc, int index) #

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

  switch (cc.type) {
    case ManifoldType.CIRCLES:
      cc.bodyA.getWorldPointToOut(cc.localPoint, pointA);
      cc.bodyB.getWorldPointToOut(cc.points[0].localPoint, pointB);
      if (MathBox.distanceSquared(pointA, pointB) >
          Settings.EPSILON * Settings.EPSILON){
        normal.setFrom(pointB).subLocal(pointA);
        normal.normalize();
      } else {
        normal.setCoords(1.0, 0.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:
      cc.bodyA.getWorldVectorToOut(cc.localNormal, normal);
      cc.bodyA.getWorldPointToOut(cc.localPoint, planePoint);

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

    case ManifoldType.FACE_B:
      cc.bodyB.getWorldVectorToOut(cc.localNormal, normal);
      cc.bodyB.getWorldPointToOut(cc.localPoint, planePoint);

      cc.bodyA.getWorldPointToOut(cc.points[index].localPoint, clipPoint);
      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 PositionSolverManifold() #

PositionSolverManifold() :
  normal = new Vector(),
  point = new Vector(),
  separation = 0,

  // Initialize pool variables.
  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();