diff options
| author | Charles <sircharlesaze@gmail.com> | 2020-05-10 14:08:07 +0200 |
|---|---|---|
| committer | Charles <sircharlesaze@gmail.com> | 2020-05-10 14:08:07 +0200 |
| commit | 6d9c284a24555a7df0b37661ff3c5491d6d0449a (patch) | |
| tree | 58d7958e7e6f59181463343891b1a590016cf5ef /src/cardioid.c | |
| parent | aea23b389a5eba09b3865209a08843e66481dd54 (diff) | |
| download | cardioid-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.c | 45 |
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); +} |
