solve static method

void solve(
  1. Matrix3 A,
  2. Vector3 x,
  3. Vector3 b
)

Solve A * x = b.

Implementation

static void solve(Matrix3 A, Vector3 x, Vector3 b) {
  final double a0x = A.entry(0, 0);
  final double a0y = A.entry(1, 0);
  final double a0z = A.entry(2, 0);
  final double a1x = A.entry(0, 1);
  final double a1y = A.entry(1, 1);
  final double a1z = A.entry(2, 1);
  final double a2x = A.entry(0, 2);
  final double a2y = A.entry(1, 2);
  final double a2z = A.entry(2, 2);
  double rx, ry, rz;
  double det;

  // Column1 cross Column 2
  rx = a1y * a2z - a1z * a2y;
  ry = a1z * a2x - a1x * a2z;
  rz = a1x * a2y - a1y * a2x;

  // A.getColumn(0).dot(x)
  det = a0x * rx + a0y * ry + a0z * rz;
  if (det != 0.0) {
    det = 1.0 / det;
  }

  // b dot [Column1 cross Column 2]
  final double x_ = det * (b.x * rx + b.y * ry + b.z * rz);

  // Column2 cross b
  rx = -(a2y * b.z - a2z * b.y);
  ry = -(a2z * b.x - a2x * b.z);
  rz = -(a2x * b.y - a2y * b.x);
  // Column0 dot -[Column2 cross b (Column3)]
  final double y_ = det * (a0x * rx + a0y * ry + a0z * rz);

  // b cross Column 1
  rx = -(b.y * a1z - b.z * a1y);
  ry = -(b.z * a1x - b.x * a1z);
  rz = -(b.x * a1y - b.y * a1x);
  // Column0 dot -[b cross Column 1]
  final double z_ = det * (a0x * rx + a0y * ry + a0z * rz);

  x
    ..x = x_
    ..y = y_
    ..z = z_;
}