From 797e30a9b3b99cce8c6da581457fa599c359b26f Mon Sep 17 00:00:00 2001 From: Alejandro Laguna Date: Wed, 15 Jul 2026 11:28:20 +0200 Subject: [PATCH] feat: show values on text --- include/mandelbrot.h | 2 +- src/main.c | 14 +++++++++----- src/math.c | 18 ++++++++++++++++++ 3 files changed, 28 insertions(+), 6 deletions(-) diff --git a/include/mandelbrot.h b/include/mandelbrot.h index ad8375a8e46b20a0160df1155d5255da925e1c59..f377522b3c91469042dd6683e95f1b7d07ce1085 100644 --- a/include/mandelbrot.h +++ b/include/mandelbrot.h @@ -21,11 +21,11 @@ typedef struct position_s { // math.c int mandelbrot_iterations(double cr, double ci, int max_iter); void calculate_points(position_t* pos); +void mandelbrot_at_point(double cr, double ci, int* iter_out, double* zr_out, double* zi_out); // draw.c // TODO: color struct or something void get_color(int iter, int max_iter, int* r, int* g, int* b); void draw_points(SDL_Surface* surface); - #endif diff --git a/src/main.c b/src/main.c index 060df0405f5ef39ab9c6fa1203ea657007ea8f50..a7d755a2e6ba3769280753dc321c4721989db342 100644 --- a/src/main.c +++ b/src/main.c @@ -101,11 +101,15 @@ int main(void) { } float mx, my; SDL_GetMouseState(&mx, &my); - int ix = (int)floor(mx); - int iy = (int)floor(my); - int iter = points[iy * WINDOW_WIDTH + ix]; - snprintf(debug_text, sizeof(debug_text), "x: %d y: %d iterations: %d", ix, iy, - iter); + double cr = + position.x_min + (position.x_max - position.x_min) * mx / (WINDOW_WIDTH - 1); + double ci = + position.y_min + (position.y_max - position.y_min) * my / (WINDOW_HEIGHT - 1); + int iter; + double zr, zi; + mandelbrot_at_point(cr, ci, &iter, &zr, &zi); + snprintf(debug_text, sizeof(debug_text), + "c = %.6f %+.6fi | z = %.6f %+.6fi | iteration %d", cr, ci, zr, zi, iter); } if (e.type == SDL_EVENT_MOUSE_MOTION) { diff --git a/src/math.c b/src/math.c index d7e737810697a0d2d47b7ae900bf03475ad3cab8..dd28d90f99b124be6147f0da5aede1b3c10f4351 100644 --- a/src/math.c +++ b/src/math.c @@ -35,6 +35,24 @@ int mandelbrot_iterations(double cr, double ci, int max_iter) { extern int points[WINDOW_WIDTH * WINDOW_HEIGHT]; +void mandelbrot_at_point(double cr, double ci, int* iter_out, double* zr_out, double* zi_out) { + double zr = 0.0, zi = 0.0; + int iter = 0; + while (iter < 100) { + double zr2 = zr * zr; + double zi2 = zi * zi; + if (zr2 + zi2 > 4.0) { + break; + } + zi = 2.0 * zr * zi + ci; + zr = zr2 - zi2 + cr; + iter++; + } + *iter_out = iter; + *zr_out = zr; + *zi_out = zi; +} + void calculate_points(position_t* pos) { int max_iter = 100; for (int py = 0; py < WINDOW_HEIGHT; py++) {