aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCharles Cabergs <me@cacharle.xyz>2021-05-13 10:43:36 +0200
committerCharles Cabergs <me@cacharle.xyz>2021-05-13 10:43:36 +0200
commit660a556b7dd9b7a5cfb1f3e1e3a55a6975675f91 (patch)
treeeccad5697a2785c2bf0debbea610d8ab84ed003a
parentaf1d25613b7e1bace9ccabad1bcc9136d6417b07 (diff)
downloadfourier-series-viz-660a556b7dd9b7a5cfb1f3e1e3a55a6975675f91.tar.gz
fourier-series-viz-660a556b7dd9b7a5cfb1f3e1e3a55a6975675f91.tar.bz2
fourier-series-viz-660a556b7dd9b7a5cfb1f3e1e3a55a6975675f91.zip
Added better viz, Added README and preview screenshotHEADmaster
-rw-r--r--Makefile7
-rw-r--r--README.md21
-rw-r--r--main.c45
-rw-r--r--preview.pngbin0 -> 16447 bytes
4 files changed, 59 insertions, 14 deletions
diff --git a/Makefile b/Makefile
index 72b707a..5dd0c2b 100644
--- a/Makefile
+++ b/Makefile
@@ -1,5 +1,5 @@
CC = gcc
-CFLAGS = -Wall -Wextra $(shell pkgconf --cflags sdl2 SDL2_gfx)
+CFLAGS = -Wall -Wextra -pedantic $(shell pkgconf --cflags sdl2 SDL2_gfx)
LDFLAGS = -lm $(shell pkgconf --libs sdl2 SDL2_gfx)
NAME = fourier-series-viz
@@ -8,3 +8,8 @@ all: $(NAME)
$(NAME): main.o
$(CC) -o $@ $(LDFLAGS) $^
+
+fclean:
+ rm -f main.o $(NAME)
+
+re: fclean all
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..ca9a11a
--- /dev/null
+++ b/README.md
@@ -0,0 +1,21 @@
+# Fourier Series Visualization
+
+![preview](preview.png)
+
+## Usage
+
+```
+$ make
+$ ./fourier-series-viz
+```
+
+### Keybindings
+
+* `Esc`, `q`: quit
+* `j`/`k`, `-`/`=`: less/more circle
+* `p`, `Space`: pause
+
+### Dependencies
+
+* [SDL2](https://libsdl.org)
+* [SDL2\_gfx](https://www.ferzkopp.net/wordpress/2016/01/02/sdl_gfx-sdl2_gfx/)
diff --git a/main.c b/main.c
index 117c24e..9dfcc63 100644
--- a/main.c
+++ b/main.c
@@ -6,11 +6,18 @@
#include <SDL2/SDL2_gfxPrimitives.h>
#define FRAME_DELAY 5
-#define WINDOW_WIDTH 648
-#define WINDOW_HEIGHT 480
+#define WINDOW_WIDTH 900
+#define WINDOW_HEIGHT 600
#define CIRCLE_RAD 100
#define CIRCLE_DIAMETER (CIRCLE_RAD * 2)
#define HISTORY_SIZE (WINDOW_WIDTH - CIRCLE_DIAMETER)
+#define POINT_RAD 3
+#define PADDING_SIZE 100
+#define SEP_SIZE (PADDING_SIZE + 100)
+
+#define HISTORY_COLOR 0xffffffff
+#define POINT_COLOR 0xffffffff
+#define CIRCLE_COLOR 0xffffffff
int g_history[HISTORY_SIZE] = {0};
double g_angle = 0.0;
@@ -89,7 +96,8 @@ int main(void)
SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255);
SDL_RenderClear(renderer);
- /* SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255); */
+ SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255);
+
/*
** n = range(1, inf, 2)
**
@@ -103,30 +111,41 @@ int main(void)
double sum_y = 0.0;
for (int circle_num = 0; circle_num < g_circle_count; circle_num++)
{
- int factor = 1 + circle_num * 2;
- int radius = (CIRCLE_RAD - 25) * 4 / (factor * M_PI);
+ double factor = 1 + circle_num * 2;
+ double radius = (CIRCLE_RAD - 25) * 4 / (factor * M_PI);
double x = radius * cos(factor * g_angle);
double y = radius * sin(factor * g_angle);
- int center_x = CIRCLE_RAD + sum_x;
+ int center_x = CIRCLE_RAD + sum_x + PADDING_SIZE;
int center_y = WINDOW_HEIGHT / 2 + sum_y;
- aacircleColor(renderer, center_x, center_y, radius, 0xffffffff);
- filledCircleColor(renderer, center_x + x, center_y + y, 3, 0xffffffff);
+ aacircleColor(renderer, center_x, center_y, radius, CIRCLE_COLOR);
+ filledCircleColor(renderer, center_x + x, center_y + y, POINT_RAD, POINT_COLOR);
sum_x += x;
sum_y += y;
}
-
g_angle += 0.01;
+ int draw_point_x = CIRCLE_DIAMETER + SEP_SIZE;
+ int draw_point_y = WINDOW_HEIGHT / 2 + sum_y;
+
+ hlineColor(renderer, CIRCLE_RAD + sum_x + PADDING_SIZE, draw_point_x, draw_point_y, HISTORY_COLOR);
+ filledCircleColor(renderer, draw_point_x, draw_point_y, POINT_RAD, POINT_COLOR);
+
memmove(g_history + 1, g_history, sizeof(g_history[0]) * (HISTORY_SIZE - 1));
g_history[0] = sum_y;
- for (size_t i = 0; i < HISTORY_SIZE; i++)
+ for (size_t i = 0; i < HISTORY_SIZE - 1; i++)
{
- SDL_RenderDrawPoint(
+ size_t next = i + 1;
+ if (g_history[next] == WINDOW_HEIGHT)
+ break;
+ aalineColor(
renderer,
- CIRCLE_DIAMETER + i + 10,
- WINDOW_HEIGHT / 2 + g_history[i]
+ CIRCLE_DIAMETER + i + SEP_SIZE,
+ WINDOW_HEIGHT / 2 + g_history[i],
+ CIRCLE_DIAMETER + next + SEP_SIZE,
+ WINDOW_HEIGHT / 2 + g_history[next],
+ HISTORY_COLOR
);
}
diff --git a/preview.png b/preview.png
new file mode 100644
index 0000000..1bcfe55
--- /dev/null
+++ b/preview.png
Binary files differ