aboutsummaryrefslogtreecommitdiff
path: root/src/cardioid.c
diff options
context:
space:
mode:
authorCharles <sircharlesaze@gmail.com>2020-05-10 14:08:07 +0200
committerCharles <sircharlesaze@gmail.com>2020-05-10 14:08:07 +0200
commit6d9c284a24555a7df0b37661ff3c5491d6d0449a (patch)
tree58d7958e7e6f59181463343891b1a590016cf5ef /src/cardioid.c
parentaea23b389a5eba09b3865209a08843e66481dd54 (diff)
downloadcardioid-6d9c284a24555a7df0b37661ff3c5491d6d0449a.tar.gz
cardioid-6d9c284a24555a7df0b37661ff3c5491d6d0449a.tar.bz2
cardioid-6d9c284a24555a7df0b37661ff3c5491d6d0449a.zip
First primitive cardioid drawing
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);
+}