Browse code

mandelbrot: add mincol inner coloring method.

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>

Michael Niedermayer authored on 2011/11/16 03:58:58
Showing 1 changed files
... ...
@@ -44,6 +44,7 @@ enum Inner{
44 44
     BLACK,
45 45
     PERIOD,
46 46
     CONVTIME,
47
+    MINCOL,
47 48
 };
48 49
 
49 50
 typedef struct Point {
... ...
@@ -96,6 +97,7 @@ static const AVOption mandelbrot_options[] = {
96 96
     {"black",       "set black mode",                0, AV_OPT_TYPE_CONST, {.dbl=BLACK}, INT_MIN, INT_MAX, 0, "inner" },
97 97
     {"period",      "set period mode",               0, AV_OPT_TYPE_CONST, {.dbl=PERIOD}, INT_MIN, INT_MAX, 0, "inner" },
98 98
     {"convergence", "show time until convergence",   0, AV_OPT_TYPE_CONST, {.dbl=CONVTIME}, INT_MIN, INT_MAX, 0, "inner" },
99
+    {"mincol",      "color based on point closest to the origin of the cycle",   0, AV_OPT_TYPE_CONST, {.dbl=MINCOL}, INT_MIN, INT_MAX, 0, "inner" },
99 100
 
100 101
     {NULL},
101 102
 };
... ...
@@ -266,6 +268,17 @@ static void draw_mandelbrot(AVFilterContext *ctx, uint32_t *color, int linesize,
266 266
                 }
267 267
                 }else if(mb->inner==CONVTIME){
268 268
                     c= (i*255/mb->maxiter)*0x010101;
269
+                } else if(mb->inner==MINCOL){
270
+                    int j;
271
+                    double closest=9999;
272
+                    int closest_index=0;
273
+                    for(j=i-1; j; j--)
274
+                        if(SQR(mb->zyklus[j][0]) + SQR(mb->zyklus[j][1]) < closest){
275
+                            closest= SQR(mb->zyklus[j][0]) + SQR(mb->zyklus[j][1]);
276
+                            closest_index= j;
277
+                        }
278
+                    closest = sqrt(closest);
279
+                    c= lrintf((mb->zyklus[closest_index][0]/closest+1)*127) + lrintf((mb->zyklus[closest_index][1]/closest+1)*127)*256;
269 280
                 }
270 281
             }
271 282
             c |= 0xFF000000;