From 6dea4de098df4232727cce51aecd85002eeeec50 Mon Sep 17 00:00:00 2001 From: Lukas Jiriste Date: Wed, 10 Apr 2024 14:07:18 +0200 Subject: [PATCH] Add option to select the fractal to draw --- fractol.h | 12 +++++++----- main.c | 38 +++++++++++++++++++++++++------------- 2 files changed, 32 insertions(+), 18 deletions(-) diff --git a/fractol.h b/fractol.h index 1c8c791..6be8bf9 100644 --- a/fractol.h +++ b/fractol.h @@ -6,7 +6,7 @@ /* By: ljiriste +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2023/11/11 18:51:29 by ljiriste #+# #+# */ -/* Updated: 2024/01/19 13:43:18 by ljiriste ### ########.fr */ +/* Updated: 2024/04/10 14:03:00 by ljiriste ### ########.fr */ /* */ /* ************************************************************************** */ @@ -32,12 +32,14 @@ struct s_img }; typedef struct s_img t_img; +typedef double (*t_fractal)(); + struct s_view { - double (*fractal)(); - t_color (*palette)(double); - t_vect2 window_coord; - t_vect2 pixel_size; + t_fractal fractal; + t_color (*palette)(double); + t_vect2 window_coord; + t_vect2 pixel_size; }; typedef struct s_view t_view; diff --git a/main.c b/main.c index e50f475..e5134e9 100644 --- a/main.c +++ b/main.c @@ -6,7 +6,7 @@ /* By: ljiriste +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2023/10/27 14:29:26 by ljiriste #+# #+# */ -/* Updated: 2024/04/10 13:39:05 by ljiriste ### ########.fr */ +/* Updated: 2024/04/10 14:03:23 by ljiriste ### ########.fr */ /* */ /* ************************************************************************** */ @@ -198,17 +198,6 @@ t_arr_stat construct_mat(t_mat *mat, size_t rows, size_t cols) return (res); } -static void init_view(t_session *s) -{ - s->view.fractal = mandelbrot; - s->view.palette = tri_color; - s->view.pixel_size.x = 0.01; - s->view.pixel_size.y = 0.01; - s->view.window_coord.x = -s->img.width / 2 * s->view.pixel_size.x; - s->view.window_coord.y = s->img.height / 2 * s->view.pixel_size.y; - return ; -} - void init_session(t_session *s) { s->mlx = mlx_init(); @@ -217,10 +206,20 @@ void init_session(t_session *s) s->img.addr = mlx_get_data_addr(s->img.img, &s->img.bpp, &s->img.bpl, &s->img.endian); ft_mat_init(&s->img.calced, sizeof(bool)); construct_mat(&s->img.calced, s->img.height, s->img.width); - init_view(s); s->img.undersample = s->img.undersample_max; } +static void init_view(t_session *s) +{ + s->view.fractal = mandelbrot; + s->view.palette = tri_color; + s->view.pixel_size.x = 0.01; + s->view.pixel_size.y = 0.01; + s->view.window_coord.x = -s->img.width / 2 * s->view.pixel_size.x; + s->view.window_coord.y = s->img.height / 2 * s->view.pixel_size.y; + return ; +} + void set_default(t_session *s) { s->set.man.detail = 1000; @@ -228,9 +227,20 @@ void set_default(t_session *s) s->img.width = 1000; s->img.height = 1000; s->img.undersample_max = 5; + init_view(s); return ; } +t_fractal to_fractal(const char *name) +{ + if (!ft_strcmp(name, "man") || !ft_strcmp(name, "mandelbrot")) + return (mandelbrot); + else if (!ft_strcmp(name, "tri") || !ft_strcmp(name, "tricorn")) + return (tricorn); + else + return (NULL); +} + int parse_args(int argc, char **argv, t_session *s) { int i; @@ -249,6 +259,8 @@ int parse_args(int argc, char **argv, t_session *s) s->img.undersample_max = ft_atoi(argv[++i]); else if (!ft_strcmp(argv[i], "-d") && ft_isint(argv[i + 1])) s->set.man.detail = ft_atoi(argv[++i]); + else if (!ft_strcmp(argv[i], "-f") && to_fractal(argv[i + 1]) != NULL) + s->view.fractal = to_fractal(argv[i + 1]); else return (1); ++i; -- 2.30.2