Add option to select the fractal to draw
authorLukas Jiriste <ljiriste@student.42prague.com>
Wed, 10 Apr 2024 12:07:18 +0000 (14:07 +0200)
committerLukas Jiriste <ljiriste@student.42prague.com>
Wed, 10 Apr 2024 12:07:18 +0000 (14:07 +0200)
fractol.h
main.c

index 1c8c7910f4de61110b686d087f51136480ba5b67..6be8bf9f8329db35f4fb0d4050640250ccdd7de8 100644 (file)
--- a/fractol.h
+++ b/fractol.h
@@ -6,7 +6,7 @@
 /*   By: ljiriste <marvin@42.fr>                    +#+  +:+       +#+        */
 /*                                                +#+#+#+#+#+   +#+           */
 /*   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 e50f47593ed156f32cc045787b8b8ff95aea116e..e5134e9efc301f7ed9f25ab228237d74837cbf91 100644 (file)
--- a/main.c
+++ b/main.c
@@ -6,7 +6,7 @@
 /*   By: ljiriste <marvin@42.fr>                    +#+  +:+       +#+        */
 /*                                                +#+#+#+#+#+   +#+           */
 /*   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;