checkpoint
authoradam <adam@megacz.com>
Sun, 16 Dec 2007 01:42:30 +0000 (17:42 -0800)
committeradam <adam@megacz.com>
Sun, 16 Dec 2007 01:42:30 +0000 (17:42 -0800)
darcs-hash:20071216014230-5007d-26a8afd540f9e95609e95a77e97c42e73415eef9.gz

src/edu/berkeley/qfat/Mesh.java

index c50e34c..725e647 100644 (file)
@@ -484,6 +484,7 @@ public class Mesh implements Iterable<Mesh.T> {
         public BindingGroup bind_to     = bind_peers.other();
         boolean shattered = false;
 
         public BindingGroup bind_to     = bind_peers.other();
         boolean shattered = false;
 
+        public boolean intersects(T t) { return t.intersects(p1.p, p2.p); }
         public float comparator() {
             Vert nearest = score_against.nearest(midpoint());
             //if (t==null) return length();
         public float comparator() {
             Vert nearest = score_against.nearest(midpoint());
             //if (t==null) return length();
@@ -670,75 +671,6 @@ public class Mesh implements Iterable<Mesh.T> {
         public float length() { return p1.p.minus(p2.p).mag(); }
         public String toString() { return p1+"->"+p2; }
 
         public float length() { return p1.p.minus(p2.p).mag(); }
         public String toString() { return p1+"->"+p2; }
 
-        public boolean intersects(T t) {
-            double A0=t.v1().p.x, A1=t.v1().p.y, A2=t.v1().p.z;
-            double B0=t.v2().p.x, B1=t.v2().p.y, B2=t.v2().p.z;
-            double C0=t.v3().p.x, C1=t.v3().p.y, C2=t.v3().p.z;
-            double j0=p1.p.x, j1=p1.p.y, j2=p1.p.z;
-            double k0=p2.p.x, k1=p2.p.y, k2=p2.p.z;
-            double J0, J1, J2;
-            double K0, K1, K2;
-            double i0, i1, i2;
-            double a0, a1, a2;
-            double b0, b1, b2;
-            double c0, c1, c2;
-            double in_det;
-            double R00, R01, R02, R03,
-                R10, R11, R12, R13,
-                R20, R21, R22, R23,
-                R30, R31, R32, R33;
-
-
-            /* a = B - A */
-            a0 = B0 - A0; 
-            a1 = B1 - A1; 
-            a2 = B2 - A2;
-            /* b = C - B */
-            b0 = C0 - A0;
-            b1 = C1 - A1;
-            b2 = C2 - A2;
-            /* c = a &times; b */
-            c0 = a1 * b2 - a2 * b1;
-            c1 = a2 * b0 - a0 * b2;
-            c2 = a0 * b1 - a1 * b0;
-            /* M^(-1) = (1/det(M)) * adj(M) */
-            in_det = 1 / (c0 * c0 + c1 * c1 + c2 * c2);
-            R00 = (b1 * c2 - b2 * c1) * in_det;
-            R01 = (b2 * c0 - b0 * c2) * in_det;
-            R02 = (b0 * c1 - b1 * c0) * in_det;
-            R10 = (c1 * a2 - c2 * a1) * in_det;
-            R11 = (c2 * a0 - c0 * a2) * in_det;
-            R12 = (c0 * a1 - c1 * a0) * in_det;
-            R20 = (c0) * in_det;
-            R21 = (c1) * in_det;
-            R22 = (c2) * in_det;
-  
-            /* O = M^(-1) * A */
-            R03 = -(R00 * A0 + R01 * A1 + R02 * A2);
-            R13 = -(R10 * A0 + R11 * A1 + R12 * A2);
-            R23 = -(R20 * A0 + R21 * A1 + R22 * A2);
-            /* fill in last row of 4x4 matrix */
-            R30 = R31 = R32 = 0;
-            R33 = 1;
-  
-            J2 = R20 * j0 + R21 * j1 + R22 * j2 + R23;
-            K2 = R20 * k0 + R21 * k1 + R22 * k2 + R23;
-            if (J2 * K2 >= 0) return false;
-
-            J0 = R00 * j0 + R01 * j1 + R02 * j2 + R03;
-            K0 = R00 * k0 + R01 * k1 + R02 * k2 + R03;
-            i0 = J0 + J2 * ((K0 - J0) / (J2 - K2));
-            if (i0 < 0 || i0 > 1) return false;
-  
-            J1 = R10 * j0 + R11 * j1 + R12 * j2 + R13;
-            K1 = R10 * k0 + R11 * k1 + R12 * k2 + R13;
-            i1 = J1 + J2 * ((K1 - J1) / (J2 - K2));
-            if (i1 < 0 || i1 > 1 || i0 + i1 > 1) return false;
-
-            return true;            
-        }
     }
 
     public E makeE(Point p1, Point p2) {
     }
 
     public E makeE(Point p1, Point p2) {
@@ -804,6 +736,76 @@ public class Mesh implements Iterable<Mesh.T> {
         public final int color;
         public final int colorclass;
 
         public final int color;
         public final int colorclass;
 
+        public boolean intersects(Point p1, Point p2) {
+            double A0=v1().p.x, A1=v1().p.y, A2=v1().p.z;
+            double B0=v2().p.x, B1=v2().p.y, B2=v2().p.z;
+            double C0=v3().p.x, C1=v3().p.y, C2=v3().p.z;
+            double j0=p1.x, j1=p1.y, j2=p1.z;
+            double k0=p2.x, k1=p2.y, k2=p2.z;
+            double J0, J1, J2;
+            double K0, K1, K2;
+            double i0, i1, i2;
+            double a0, a1, a2;
+            double b0, b1, b2;
+            double c0, c1, c2;
+            double in_det;
+            double R00, R01, R02, R03,
+                R10, R11, R12, R13,
+                R20, R21, R22, R23,
+                R30, R31, R32, R33;
+
+
+            /* a = B - A */
+            a0 = B0 - A0; 
+            a1 = B1 - A1; 
+            a2 = B2 - A2;
+            /* b = C - B */
+            b0 = C0 - A0;
+            b1 = C1 - A1;
+            b2 = C2 - A2;
+            /* c = a &times; b */
+            c0 = a1 * b2 - a2 * b1;
+            c1 = a2 * b0 - a0 * b2;
+            c2 = a0 * b1 - a1 * b0;
+            /* M^(-1) = (1/det(M)) * adj(M) */
+            in_det = 1 / (c0 * c0 + c1 * c1 + c2 * c2);
+            R00 = (b1 * c2 - b2 * c1) * in_det;
+            R01 = (b2 * c0 - b0 * c2) * in_det;
+            R02 = (b0 * c1 - b1 * c0) * in_det;
+            R10 = (c1 * a2 - c2 * a1) * in_det;
+            R11 = (c2 * a0 - c0 * a2) * in_det;
+            R12 = (c0 * a1 - c1 * a0) * in_det;
+            R20 = (c0) * in_det;
+            R21 = (c1) * in_det;
+            R22 = (c2) * in_det;
+  
+            /* O = M^(-1) * A */
+            R03 = -(R00 * A0 + R01 * A1 + R02 * A2);
+            R13 = -(R10 * A0 + R11 * A1 + R12 * A2);
+            R23 = -(R20 * A0 + R21 * A1 + R22 * A2);
+            /* fill in last row of 4x4 matrix */
+            R30 = R31 = R32 = 0;
+            R33 = 1;
+  
+            J2 = R20 * j0 + R21 * j1 + R22 * j2 + R23;
+            K2 = R20 * k0 + R21 * k1 + R22 * k2 + R23;
+            if (J2 * K2 >= 0) return false;
+
+            J0 = R00 * j0 + R01 * j1 + R02 * j2 + R03;
+            K0 = R00 * k0 + R01 * k1 + R02 * k2 + R03;
+            i0 = J0 + J2 * ((K0 - J0) / (J2 - K2));
+            if (i0 < 0 || i0 > 1) return false;
+  
+            J1 = R10 * j0 + R11 * j1 + R12 * j2 + R13;
+            K1 = R10 * k0 + R11 * k1 + R12 * k2 + R13;
+            i1 = J1 + J2 * ((K1 - J1) / (J2 - K2));
+            if (i1 < 0 || i1 > 1 || i0 + i1 > 1) return false;
+
+            return true;            
+        }
+
         public void removeFromRTree() { tris.remove(this); }
         public void addToRTree() { tris.insert(this); }
 
         public void removeFromRTree() { tris.remove(this); }
         public void addToRTree() { tris.insert(this); }