diff options
| -rw-r--r-- | graphics.c | 17 | ||||
| -rw-r--r-- | header.h | 6 | ||||
| -rw-r--r-- | mandelbrot.c | 6 |
3 files changed, 16 insertions, 13 deletions
@@ -46,18 +46,21 @@ void graphics_run(GState *state) static void update(GState *state) { - SDL_SetRenderDrawColor(state->renderer, 155, 155, 155, SDL_ALPHA_OPAQUE); + SDL_SetRenderDrawColor(state->renderer, 0, 0, 0, SDL_ALPHA_OPAQUE); SDL_RenderClear(state->renderer); for (int x = 0; x < WINDOW_W; x++) { for (int y = 0; y < WINDOW_H; y++) { - if (mandelbrot_in_set(map_range((double)x, 0, WINDOW_W, LO, HI) - + map_range((double)y, 0, WINDOW_H, LO, HI) * I)) - { - SDL_SetRenderDrawColor(state->renderer, 0, 0, 0, SDL_ALPHA_OPAQUE); - SDL_RenderDrawPoint(state->renderer, x, y); - } + double complex mapped_z = map_range((double)x, 0, WINDOW_W, LO, HI) + + map_range((double)y, 0, WINDOW_H, LO, HI) * I; + int steps = mandelbrot_in_set(mapped_z); + if (steps == -1) + continue; + double brightness = map_range(steps, LO, HI, 0, 20); + SDL_SetRenderDrawColor(state->renderer, brightness, brightness, + brightness, SDL_ALPHA_OPAQUE); + SDL_RenderDrawPoint(state->renderer, x, y); } } SDL_RenderPresent(state->renderer); @@ -13,8 +13,8 @@ # define AXIS_DIV 46.0 # define AXIS_STEP ((HI - LO) / AXIS_DIV) -# define MAX_ITERATION 50 -# define _INFINITY 15 +# define MAX_ITERATION 30 +# define _INFINITY 4 typedef struct @@ -31,7 +31,7 @@ typedef struct } GConf; // mandelbrot.c -double mandelbrot_in_set(double _Complex c); +int mandelbrot_in_set(double _Complex c); void mandelbrot_print(void); // graphics.c diff --git a/mandelbrot.c b/mandelbrot.c index c5f5148..48d893d 100644 --- a/mandelbrot.c +++ b/mandelbrot.c @@ -6,7 +6,7 @@ #define IN_CHAR '*' #define OUT_CHAR ' ' -double mandelbrot_in_set(double complex c) +int mandelbrot_in_set(double complex c) { int i; double complex z = 0; @@ -14,9 +14,9 @@ double mandelbrot_in_set(double complex c) { z = cpow(z, 2) + c; if (cabs(z) > _INFINITY) - return 0; + return i; } - return 1; + return -1; } void mandelbrot_print(void) |
