feat: draw circle

This commit is contained in:
2025-11-01 10:09:02 +01:00
parent 9ea8ee05db
commit eea1cbbbfa

View File

@@ -1,7 +1,57 @@
#include <SDL3/SDL.h>
#include <SDL3/SDL_events.h>
#include <SDL3/SDL_render.h>
#include <cstdio>
#include <cstdlib>
bool key_event(SDL_Event e) {
if (e.type == SDL_EVENT_KEY_DOWN) {
if (e.key.key == SDLK_Q) {
return true;
}
}
return false;
}
bool event_handling(SDL_Event e) {
while (SDL_PollEvent(&e)) {
if (e.type == SDL_EVENT_QUIT) {
return true;
}
if (key_event(e)) {
return true;
}
}
return false;
}
void draw_circle(SDL_Renderer *renderer, int centerX, int centerY, int radius) {
int x = radius;
int y = 0;
int decision = 1 - x;
SDL_SetRenderDrawColor(renderer, 255, 0, 255, 255);
while (x >= y) {
SDL_RenderPoint(renderer, centerX + x, centerY + y);
SDL_RenderPoint(renderer, centerX - x, centerY + y);
SDL_RenderPoint(renderer, centerX + x, centerY - y);
SDL_RenderPoint(renderer, centerX - x, centerY - y);
SDL_RenderPoint(renderer, centerX + y, centerY + x);
SDL_RenderPoint(renderer, centerX - y, centerY + x);
SDL_RenderPoint(renderer, centerX + y, centerY - x);
SDL_RenderPoint(renderer, centerX - y, centerY - x);
y++;
if (decision <= 0) {
decision += 2 * y + 1;
} else {
x--;
decision += 2 * (y - x + 1);
}
}
}
int main() {
if (!SDL_Init(SDL_INIT_VIDEO)){
std::printf("SDL_INIT() failed");
@@ -11,7 +61,17 @@ int main() {
SDL_Window *window;
window = SDL_CreateWindow("Physics Sim", 720, 540, SDL_WINDOW_RESIZABLE);
SDL_Delay(5000);
SDL_Renderer *renderer = SDL_CreateRenderer(window, NULL);
SDL_Event e;
bool exit = false;
while (!exit) {
exit = event_handling(e);
draw_circle(renderer, 150, 150, 100);
SDL_RenderPresent(renderer);
}
SDL_Quit();
return 0;
}