added bounding box translation functions to Affine.java
authoradam <adam@megacz.com>
Sun, 9 Jan 2005 09:06:58 +0000 (09:06 +0000)
committeradam <adam@megacz.com>
Sun, 9 Jan 2005 09:06:58 +0000 (09:06 +0000)
darcs-hash:20050109090658-5007d-27314cb4768b6c29c64bdc9a3574d84c44f5cc31.gz

src/org/ibex/graphics/Affine.java

index 027f048..83b2d18 100644 (file)
@@ -25,7 +25,19 @@ public final class Affine {
     public static Affine flip(boolean horiz, boolean vert) { return new Affine(horiz ? -1 : 1, 0, 0, vert ? -1 : 1, 0, 0); }
     public float multiply_px(float x, float y) { return x * a + y * c + e; }
     public float multiply_py(float x, float y) { return x * b + y * d + f; }
+    public float sign(float x) { return x >= 0 ? 1 : -1; }
+    public float divide_boundingbox_x(float bx, float by, float aspect) {
+        return (float)Math.min(Math.abs(bx * (sign(a) * sign(c)) / (aspect * a + c)),
+                               Math.abs(by * (sign(b) * sign(d)) / (aspect * b + d)));
+    }
+    public float multiply_boundingbox_x(float x, float y) {
+        return (float)Math.max((int)Math.abs(multiply_px(x, y) - multiply_px(0, 0)),
+                               (int)Math.abs(multiply_px(x, 0) - multiply_px(0, y))); }
+    public float multiply_boundingbox_y(float x, float y) {
+        return (float)Math.max((int)Math.abs(multiply_py(x, y) - multiply_py(0, 0)),
+                               (int)Math.abs(multiply_py(x, 0) - multiply_py(0, y))); }
     public boolean equalsIgnoringTranslation(Affine x) { return a == x.a && b == x.b && c == x.c && d == x.d; }
+    public Affine clearTranslation() { e = (float)0.0; f = (float)0.0; return this; }
 
     public boolean equals(Object o) {
         if (!(o instanceof Affine)) return false;
@@ -63,7 +75,7 @@ public final class Affine {
         return this;
     }
 
-    public void invert() {
+    public Affine invert() {
         float det = 1 / (a * d - b * c);
         float _a = d * det;
         float _b = -1 * b * det;
@@ -72,6 +84,7 @@ public final class Affine {
         float _e = -1 * e * a - f * c;
         float _f = -1 * e * b - f * d;
         a = _a; b = _b; c = _c; d = _d; e = _e; f = _f;
+        return this;
     }
 
     public static Affine parse(String t) {