X-Git-Url: http://git.megacz.com/?p=anneal.git;a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fqfat%2Fgeom%2FMatrix.java;h=f617376b09f7a683770f23e1513bc2b64f555ce5;hp=751dfa10193dfe32a7b559151a0752a6d811c7be;hb=162b76f92f5adaf80b312bee2a6bcd5b7ba2eabd;hpb=1cb56f053dc0a26302e777b2f82aa043ee780950 diff --git a/src/edu/berkeley/qfat/geom/Matrix.java b/src/edu/berkeley/qfat/geom/Matrix.java index 751dfa1..f617376 100644 --- a/src/edu/berkeley/qfat/geom/Matrix.java +++ b/src/edu/berkeley/qfat/geom/Matrix.java @@ -8,29 +8,36 @@ public class Matrix { // [ i j k l ] [ z ] // [ 0 0 0 1 ] [ 1 ] // - public final float a, b, c, d, e, f, g, h, i, j, k, l; + public final float a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p; public Matrix() { this(1); } public Matrix(float scale) { a = f = k = scale; l = h = d = e = b = i = c = j = g = 0; + m = n = o = 0; + p = 1; } public Matrix(float scalex, float scaley, float scalez) { a = scalex; f = scaley; k = scalez; l = h = d = e = b = i = c = j = g = 0; + m = n = o = 0; + p = 1; } public Matrix(Vec translate) { d = translate.x; h = translate.y; l = translate.z; a = f = k = 1; b = c = e = g = i = j = 0; + m = n = o = 0; + p = 1; } - public Matrix(float a, float b, float c, float d, float e, float f, float g, float h, float i, float j, float k, float l) { + public Matrix(float a, float b, float c, float d, float e, float f, float g, + float h, float i, float j, float k, float l, float m, float n, float o, float p) { this.a = a; this.b = b; this.c = c; this.d = d; this.e = e; this.f = f; this.g = g; this.h = h; this.i = i; - this.j = j; this.k = k; this.l = l; + this.j = j; this.k = k; this.l = l; this.m = m; this.n = n; this.o = o; this.p = p; } public Matrix times(float x) { - return new Matrix(a*x, b*x, c*x, d*x, e*x, f*x, g*x, h*x, i*x, j*x, k*x, l*x); + return new Matrix(a*x, b*x, c*x, d*x, e*x, f*x, g*x, h*x, i*x, j*x, k*x, l*x, m*x, n*x, o*x, p*x); } public Matrix(Vec axis, float angle) { double q = Math.cos(angle); @@ -52,8 +59,11 @@ public class Matrix { j = (float)(tmp1 + tmp2); g = (float)(tmp1 - tmp2); d = h = l = 0; + m = n = o = 0; + p = 1; } public Point times(Point p) { + // discards bottom row return new Point(a*p.x + b*p.y + c*p.z + d, e*p.x + f*p.y + g*p.z + h, i*p.x + j*p.y + k*p.z + l);