Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Michael Niedermayer authored on 2011/11/16 03:58:58... | ... |
@@ -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; |