feat: fill circle
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -1,24 +1,33 @@
|
|||||||
#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) {
|
||||||
SDL_RenderPoint(renderer, center_x + x, center_y + y);
|
if (fill) {
|
||||||
SDL_RenderPoint(renderer, center_x - x, center_y + y);
|
// Draw horizontal lines across the circle
|
||||||
SDL_RenderPoint(renderer, center_x + x, center_y - y);
|
SDL_RenderLine(renderer, center_x - x, center_y + y, center_x + x, center_y + y);
|
||||||
SDL_RenderPoint(renderer, center_x - x, center_y - y);
|
SDL_RenderLine(renderer, center_x - x, center_y - y, center_x + x, center_y - y);
|
||||||
SDL_RenderPoint(renderer, center_x + y, center_y + x);
|
SDL_RenderLine(renderer, center_x - y, center_y + x, center_x + y, center_y + x);
|
||||||
SDL_RenderPoint(renderer, center_x - y, center_y + x);
|
SDL_RenderLine(renderer, center_x - y, center_y - x, center_x + y, center_y - x);
|
||||||
SDL_RenderPoint(renderer, center_x + y, center_y - x);
|
} else {
|
||||||
SDL_RenderPoint(renderer, center_x - y, center_y - x);
|
// 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 + 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 {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user