Я пытаюсь реализовать алгоритм рисования средней точки в C# для сканирования от точки наружу. У меня есть следующий код:
private bool[,] squares;
public Bitmap(int br, int h)
{
squares = new bool[br, h];
MakeCircle(9, 10, 10);
MakeCircle(8, 10, 10);
MakeCircle(7, 10, 10);
MakeCircle(6, 10, 10);
MakeCircle(5, 10, 10);
MakeCircle(4, 10, 10);
MakeCircle(3, 10, 10);
MakeCircle(2, 10, 10);
MakeCircle(1, 10, 10);
MakeCircle(0, 10, 10);
}
public void SelectSymmetry(int x, int y, int x0, int y0)
{
TryPlace(x + x0, y + y0);
TryPlace(-x + x0, y + y0);
TryPlace(x + x0, -y + y0);
TryPlace(-x + x0, -y + y0);
TryPlace(y + x0, x + y0);
TryPlace(-y + x0, x + y0);
TryPlace(y + x0, -x + y0);
TryPlace(-y + x0, -x + y0);
}
public void TryPlace(int x, int y)
{
if (x >= 0 && x < vakjes.GetLength(0) && y >= 0 && y < vakjes.GetLength(1))
{
squares[x, y] = true;
}
}
public void MakeCircle(int radius, int x0, int y0)
{
int x = 0;
int y = radius;
double d = 5 / 4.0 - radius;
SelectSymmetry(x, y, x0, y0);
while (x < y)
{
x++;
if (d < 0)
{
d += 2 * x + 1;
}
else
{
y--;
d += 2 * (x - y) + 1;
}
SelectSymmetry(x, y, x0, y0);
}
}
Это создает следующее изображение:
И это проблема. Насколько я могу судить, 2 круга не занимают один и тот же пиксель, но есть пиксели, которые не заполнены ни одним кружком. Есть ли способ изменить мой код, чтобы эти пиксели принадлежали кругу? Любая помощь будет высоко ценится.
PS Извините за дамп кода, но я чувствовал, что это был самый прямой способ показать мою проблему.