feat: fill circle

This commit is contained in:
2025-11-07 10:03:09 +01:00
parent 1fff793de6
commit 42183469ab
3 changed files with 22 additions and 12 deletions

View File

@@ -3,7 +3,7 @@
#include <SDL3/SDL_render.h> #include <SDL3/SDL_render.h>
namespace gfx { namespace gfx {
void draw_circle(SDL_Renderer *renderer, int center_x, int center_y, int radius); void draw_circle(SDL_Renderer *renderer, int center_x, int center_y, int radius, bool fill);
} }
#endif #endif

View File

@@ -1,13 +1,22 @@
#include <SDL3/SDL_render.h> #include <SDL3/SDL_render.h>
namespace gfx { namespace gfx {
void draw_circle(SDL_Renderer *renderer, int center_x, int center_y, int radius) { void draw_circle(SDL_Renderer *renderer, int center_x, int center_y, int radius, bool fill) {
int x = radius; int x = radius;
int y = 0; int y = 0;
int decision = 1 - x; int decision = 1 - x;
SDL_SetRenderDrawColor(renderer, 255, 0, 255, 255); SDL_SetRenderDrawColor(renderer, 255, 0, 255, 255);
while (x >= y) { while (x >= y) {
if (fill) {
// Draw horizontal lines across the circle
SDL_RenderLine(renderer, center_x - x, center_y + y, center_x + x, center_y + y);
SDL_RenderLine(renderer, center_x - x, center_y - y, center_x + x, center_y - y);
SDL_RenderLine(renderer, center_x - y, center_y + x, center_x + y, center_y + x);
SDL_RenderLine(renderer, center_x - y, center_y - x, center_x + y, center_y - x);
} else {
// Just draw points for the outline
SDL_RenderPoint(renderer, center_x + x, center_y + y); SDL_RenderPoint(renderer, center_x + x, center_y + y);
SDL_RenderPoint(renderer, center_x - x, center_y + y); SDL_RenderPoint(renderer, center_x - x, center_y + y);
SDL_RenderPoint(renderer, center_x + x, center_y - y); SDL_RenderPoint(renderer, center_x + x, center_y - y);
@@ -16,9 +25,9 @@ namespace gfx {
SDL_RenderPoint(renderer, center_x - y, center_y + x); SDL_RenderPoint(renderer, center_x - y, center_y + x);
SDL_RenderPoint(renderer, center_x + y, center_y - x); SDL_RenderPoint(renderer, center_x + y, center_y - x);
SDL_RenderPoint(renderer, center_x - y, center_y - x); SDL_RenderPoint(renderer, center_x - y, center_y - x);
}
y++; y++;
if (decision <= 0) { if (decision <= 0) {
decision += 2 * y + 1; decision += 2 * y + 1;
} else { } else {
@@ -28,3 +37,4 @@ namespace gfx {
} }
} }
} }

View File

@@ -57,7 +57,7 @@ int main() {
exit = event_handling(e); exit = event_handling(e);
SDL_SetRenderDrawColor(renderer, 0, 0, 0, 0); SDL_SetRenderDrawColor(renderer, 0, 0, 0, 0);
SDL_RenderClear(renderer); SDL_RenderClear(renderer);
gfx::draw_circle(renderer, circle_pos.x, circle_pos.y, 10); gfx::draw_circle(renderer, circle_pos.x, circle_pos.y, 10, true);
circle_pos.x++; circle_pos.x++;
SDL_RenderPresent(renderer); SDL_RenderPresent(renderer);
SDL_Delay(16); SDL_Delay(16);