aboutsummaryrefslogtreecommitdiff
path: root/src/cardioid.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/cardioid.c')
-rw-r--r--src/cardioid.c45
1 files changed, 45 insertions, 0 deletions
diff --git a/src/cardioid.c b/src/cardioid.c
new file mode 100644
index 0000000..891de8d
--- /dev/null
+++ b/src/cardioid.c
@@ -0,0 +1,45 @@
+#include "cardioid.h"
+
+int cardioid_init(t_cardioid *cardioid, size_t points_num, int width, int height)
+{
+ cardioid->points = NULL;
+ cardioid->points_num = points_num;
+ return (cardioid_update_window(cardioid, width, height));
+}
+
+int cardioid_update_window(t_cardioid *cardioid, int width, int height)
+{
+ cardioid->center.x = width / 2;
+ cardioid->center.y = height / 2;
+ cardioid->radius = MIN(width, height) / 2 - 10;
+ printf("%d %d, %lu\n", cardioid->center.x,
+ cardioid->center.y,
+ cardioid->radius);
+
+ return (cardioid_update_points(cardioid, cardioid->points_num));
+}
+
+int cardioid_update_points(t_cardioid *cardioid, size_t points_num)
+{
+ double radian_step;
+ double radian_pos;
+
+ cardioid->points = realloc(cardioid->points, sizeof(SDL_Point) * points_num);
+ if (cardioid->points == NULL)
+ return (-1);
+ cardioid->points_num = points_num;
+ radian_pos = 0;
+ radian_step = (2 * M_PI) / points_num;
+ for (size_t i = 0; i < points_num; i++)
+ {
+ cardioid->points[i].x = cos(radian_pos) * (double)cardioid->radius + (double)cardioid->center.x;
+ cardioid->points[i].y = sin(radian_pos) * (double)cardioid->radius + (double)cardioid->center.y;
+ radian_pos += radian_step;
+ }
+ return (0);
+}
+
+void cardioid_quit(t_cardioid *cardioid)
+{
+ free(cardioid->points);
+}