diff options
| author | JP Appel <jeanpierre.appel01@gmail.com> | 2024-04-20 02:43:17 -0400 |
|---|---|---|
| committer | JP Appel <jeanpierre.appel01@gmail.com> | 2024-04-20 02:43:17 -0400 |
| commit | 5cba5bc63de403c779fd4fa762216280d4396444 (patch) | |
| tree | f1c2da748ab8f5bd88b40d09cd617838257dfb23 /src/fractals.c | |
| parent | 74c1057a1cea4ec5fc3a8f338b24af553cc83399 (diff) | |
reorganized src files
Diffstat (limited to 'src/fractals.c')
| -rw-r--r-- | src/fractals.c | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/src/fractals.c b/src/fractals.c new file mode 100644 index 0000000..1e27b9c --- /dev/null +++ b/src/fractals.c @@ -0,0 +1,73 @@ +#include <complex.h> +#include <stddef.h> +#include <stdint.h> +#include <stdio.h> +#include <unistd.h> +#include <stdlib.h> + +#include "grids.h" +#include "fractals.h" + + +/* + * Converts a grid point into an complex number + */ +double complex lattice_to_complex(const size_t index, const size_t x_res, const size_t y_res) { + const double x_min = -2.0; + const double x_max = 2.0; + const double y_min = -2.0; + const double y_max = 2.0; + + const double x_step = (x_max - x_min) / (double)x_res; + const double y_step = (y_max - y_min) / (double)y_res; + + const size_t x_index = index % x_res; + const size_t y_index = index / x_res; + + const double x = x_min + x_index * x_step; + const double y = y_min + y_index * y_step; + + return x + y * I; +} + + +int main(const int argc, char *argv[]) { + //default values + size_t iterations = 1000; + size_t x_res = 100; + size_t y_res = 100; + + //parse command line arguments + int opt; + while((opt =getopt(argc, argv, "i:x:y:")) != -1){ + switch(opt){ + case 'i': + iterations = strtoull(optarg, NULL, 10); + break; + case 'x': + x_res = strtoull(optarg, NULL, 10); + break; + case 'y': + y_res = strtoull(optarg, NULL, 10); + break; + default: + fprintf(stderr, "Usage: %s [-i iterations] [-x x_res] [-y y_res]\n", argv[0]); + return 1; + } + } + + + grid_t* grid = create_grid(x_res, y_res); + if(!grid) return 1; + + + const size_t size = grid->size; + size_t* data = grid->data; + for(size_t i = 0; i < size;i++){ + data[i] = multibrot(lattice_to_complex(i, x_res, y_res), iterations, 3); + } + + for(size_t i = 0; i < size; i++){ + printf("%zu%s", data[i], (i % x_res == x_res - 1) ? "\n" : "\t"); + } +} |
