37 lines
1.3 KiB
C
37 lines
1.3 KiB
C
#ifndef PHP_SDL3_HELPER
|
|
#define PHP_SDL3_HELPER
|
|
|
|
#include <SDL3/SDL.h>
|
|
#include "math.h"
|
|
static void draw_hline(SDL_Renderer *renderer, int x1, int x2, int y) {
|
|
if (x2 < x1) return;
|
|
SDL_RenderLine(renderer, x1, y, x2, y);
|
|
}
|
|
|
|
// Zeichnet einen gefüllten Viertel-Kreis (filled quarter circle).
|
|
// quadrant: 0 = top-left, 1 = top-right, 2 = bottom-right, 3 = bottom-left
|
|
static void filled_quarter_circle(SDL_Renderer *renderer, int cx, int cy, int r, int quadrant) {
|
|
if (r <= 0) return;
|
|
int r2 = r * r;
|
|
for (int dy = 0; dy <= r; ++dy) {
|
|
// dy ist vertikale Distanz vom Kreiszentrum (0..r)
|
|
int dx = (int)floor(sqrt((double)r2 - (double)dy * dy));
|
|
switch (quadrant) {
|
|
case 0: // top-left: y = cy - dy, x in [cx - dx, cx]
|
|
draw_hline(renderer, cx - dx, cx, cy - dy);
|
|
break;
|
|
case 1: // top-right: y = cy - dy, x in [cx, cx + dx]
|
|
draw_hline(renderer, cx, cx + dx, cy - dy);
|
|
break;
|
|
case 2: // bottom-right: y = cy + dy, x in [cx, cx + dx]
|
|
draw_hline(renderer, cx, cx + dx, cy + dy);
|
|
break;
|
|
case 3: // bottom-left: y = cy + dy, x in [cx - dx, cx]
|
|
draw_hline(renderer, cx - dx, cx, cy + dy);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
#endif
|