solve method
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_;
}