public static bool[][] CalculateCircle(int radius, int originSize)
{
if (originSize < 1)
{
return null;
}
int size = (radius * 2) + originSize;
bool[][] grid = new bool[size][];
for (int i = 0; i < grid.Length; i++)
{
grid[i] = new bool[size];
}
int f = 1 - radius;
int ddF_x = 1;
int ddF_y = -2 * radius;
int x = 0;
int y = radius;
int origin = radius;
int modifiedOriginSize = originSize - 1;
for (int i = 0; i < originSize; i++)
{
grid[origin + i][origin + radius + modifiedOriginSize] = true;
grid[origin + i][0] = true;
grid[origin + radius + modifiedOriginSize][origin + i] = true;
grid[0][origin + i] = true;
}
while (x < y)
{
if (f >= 0)
{
y--;
ddF_y += 2;
f += ddF_y;
}
x++;
ddF_x += 2;
f += ddF_x;
grid[origin + modifiedOriginSize + x][origin + modifiedOriginSize + y] = true;
grid[origin - x][origin + modifiedOriginSize + y] = true;
grid[origin + modifiedOriginSize + x][origin - y] = true;
grid[origin - x][origin - y] = true;
grid[origin + modifiedOriginSize + y][origin + modifiedOriginSize + x] = true;
grid[origin - y][origin + modifiedOriginSize + x] = true;
grid[origin + modifiedOriginSize + y][origin - x] = true;
grid[origin - y][origin - x] = true;
}
return grid;
}