Zooms in and out of the faces
[cascardo/movie.git] / movie.c
diff --git a/movie.c b/movie.c
index d348869..b7c04cc 100644 (file)
--- a/movie.c
+++ b/movie.c
@@ -21,6 +21,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <ctype.h>
+#include <math.h>
 
 #include "point.h"
 
@@ -141,16 +142,35 @@ drop_dup_frames (GArray *points, int n)
   return frames;
 }
 
+GArray *
+get_scales (int n)
+{
+  GArray *scales;
+  double scale;
+  double factor;
+  scales = g_array_new (FALSE, TRUE, sizeof (double));
+  factor = pow (8.0, 1.0/((double) n/2));
+  factor = 1.0/factor;
+  for (scale = 4.00; scale > 0.5 && scales->len < n/2; scale *= factor)
+    scales = g_array_append_val (scales, scale);
+  factor = 1.0/factor;
+  for (scale = 0.5; scale < 4.0 && scales->len < n; scale *= factor)
+    scales = g_array_append_val (scales, scale);
+  return scales;
+}
+
 void
-rescale_points (GArray *points)
+rescale_points (GArray *points, GArray *scales)
 {
   Point *point;
+  double scale;
   int i;
   for (i = 0; i < points->len; i++)
     {
       point = &(g_array_index (points, Point, i));
-      point->rx = 4.0;
-      point->ry = 4.0;
+      scale = g_array_index (scales, double, (i % scales->len));
+      point->rx = scale;
+      point->ry = scale;
       point->x *= point->rx;
       point->y *= point->ry;
     }