- Matrix m = Matrix.ZERO;
- int count = 0;
- for(E e = this.e; e!=null; e=e.pair.next==this.e?null:e.pair.next) {
- T t = e.t;
- m = m.plus(t.norm().fundamentalQuadric(t.centroid()));
- count++;
+ if (quadricStale || fundamentalQuadric==null) {
+ Matrix m = Matrix.ZERO;
+ int count = 0;
+ for(E e = this.e; e!=null; e=e.pair.next==this.e?null:e.pair.next) {
+ T t = e.t;
+ m = m.plus(t.norm().fundamentalQuadric(t.centroid()));
+ count++;
+ }
+ quadricStale = false;
+ fundamentalQuadric = m.times(1/(float)count);