chiark / gitweb /
best interpolation so far
[moebius2.git] / interpolate.c
index b705bcf..778e37c 100644 (file)
@@ -94,6 +94,8 @@ static void traverse_next(Traverse *t) {
   t->v= v2;
 }
 
+#if 0
+
 static void interpolate(void) {
   /* four points P Q R S, although P and S may be missing
    * interpolate in QR finding M. */
@@ -139,10 +141,12 @@ static void interpolate(void) {
          K srtarg[k]= all.a[vq][k];
 
        K {
+         const double alpha= 3.0;
          all.a[vm][k]= 0.5 * (all.a[vq][k] + all.a[vr][k]);
-//       pqtarg[k]= 0.5 * (pqtarg[k] + all.a[vm][k]);
-//       srtarg[k]= 0.5 * (srtarg[k] + all.a[vm][k]);
-//       all.a[vm][k]= 0.5 * (pqtarg[k] + srtarg[k]);
+         pqtarg[k]= 0.5 * (pqtarg[k] + all.a[vm][k]);
+         srtarg[k]= 0.5 * (srtarg[k] + all.a[vm][k]);
+         all.a[vm][k]= (pqtarg[k] + srtarg[k] + alpha * all.a[vm][k])
+           / (2 + alpha);
          note_computed(vm,k);
        }
       }
@@ -151,7 +155,9 @@ static void interpolate(void) {
   }
 }
 
-#if 0
+#endif
+
+#if 1
 
 static void interpolate_line(int startvertex,
                             int direction /* edge number */,
@@ -222,7 +228,7 @@ static void interpolate(void) {
   int x,y;
   
   for (y=0; y<(Y+1)/2; y+=INC) {
-    interpolate_line(y<<YSHIFT, 0, OX*2+1);
+    interpolate_line(y<<YSHIFT | ((y>>1)&1), 0, OX*2+1);
   }
   for (x=0; x<X; x+=INC) {
     interpolate_line(                x, 5, OY);