fixed vertex normals
[anneal.git] / src / Geom.java
index 558332d..3a5f4a6 100644 (file)
@@ -179,17 +179,13 @@ public class Geom implements Iterable<Geom.T> {
         public String toString() { return ""+name; }
         //{ return "("+x+","+y+","+z+")"; }
         public V norm() {
-            /*
-            if (t==null) throw new Error("attempt to get vertex normal for point which does not belong to any triangles");
-            T ti = t;
             V norm = new V(0, 0, 0);
+            E e = this.e;
             do {
-                norm = norm.plus(ti.norm().times((float)ti.angle(this)));
-                ti = ti.nextT(this);
-            } while(ti != t);
+                norm = norm.plus(e.t.norm().times((float)e.prev.angle()));
+                e = e.pair.next;
+            } while(e != this.e);
             return norm.norm();
-            */
-            throw new Error();
         }
     }
 
@@ -239,6 +235,13 @@ public class Geom implements Iterable<Geom.T> {
             return t;
         }
 
+        /** angle between this half-edge and the next */
+        public double angle() {
+            V v1 = next.p2.minus(p2);
+            V v2 = this.p1.minus(p2);
+            return Math.acos(v1.norm().dot(v2.norm()));
+        }
+
         public void makeAdjacent(E e) {
             if (this.next == e) return;
             if (p2 != e.p1) throw new Error("cannot make adjacent -- no shared vertex");
@@ -415,14 +418,8 @@ public class Geom implements Iterable<Geom.T> {
             else if (p == e3.shared(e1)) return e1;
             else throw new Error("triangle " + this + " does not own point " + p);
         }
-
-        // returns the angle at point p
-        public double angle(P p) {
-            V v1 = nextE(p).other(p).minus(p);
-            V v2 = prevE(p).other(p).minus(p);
-            return Math.acos(v1.norm().dot(v2.norm()));
-        }
         */
+
     }