orton_runner/lib/my_csfml/my_circle.c

67 lines
1.6 KiB
C

/*
** EPITECH PROJECT, 2018
** task01
** File description:
** I do task
*/
#include "../../include/lib/s_sfml.h"
#include "../../include/lib/my_graphics.h"
static void my_circle_line(sfml_t *sfml,
int circle[3], int var[4], uint32_t color)
{
int h_line[3];
if (var[1] >= var[0]){
h_line[0] = circle[1] + var[0];
h_line[1] = circle[0] - var[1];
h_line[2] = circle[0] + var[1];
my_horizontal_line(sfml, h_line, color);
h_line[0] = circle[1] - var[0];
my_horizontal_line(sfml, h_line, color);
}
}
static void my_var_init(int var[], int circle[3])
{
var[0] = 0;
var[1] = circle[2];
}
static void draw_line_circle(sfml_t *sfml,
int circle[3], int var[4], uint32_t color)
{
int h_line[3];
h_line[0] = circle[1] + var[1] + 1;
h_line[1] = circle[0] - var[0];
h_line[2] = circle[0] + var[0];
my_horizontal_line(sfml, h_line, color);
h_line[0] = circle[1] - var[1] - 1;
my_horizontal_line(sfml, h_line, color);
}
void my_filled_circle(sfml_t *sfml, int circle[3], uint32_t color)
{
int h_line[4] = {circle[1], circle[0] - circle[2],
circle[0] + circle[2]};
int tmp = 1 - circle[2];
int var[4];
if (circle[2] < 0)
return;
my_var_init(var, circle);
my_horizontal_line(sfml, h_line, color);
while (var[1] > var[0]){
if (tmp < 0)
tmp += (var[0] << 1) + 3;
else {
tmp += ((var[0]-var[1]) << 1) + 5;
var[1]--;
draw_line_circle(sfml, circle, var, color);
}
var[0]++;
my_circle_line(sfml, circle, var, color);
}
}