我正在开发一个等轴测格子游戏(更准确地说是典型的菱形布局),希望实现圆形画笔来像使用任何图像编辑软件一样在我的地图上绘制瓷砖。我从Midpoint Circle Algorithm开始,但很快注意到,对于1到7之间的小画笔尺寸,结果看起来并不是我想要的。
以下是维基百科中第一个示例图像的代码:
我更喜欢像这样的东西:
忽略第一个圆没有填充的问题,这当然很容易。是否有适合在iso网格上生成形状的算法?我可能甚至不想要圆形,而是交替使用四边形和十字形/ X 形状。以下是维基百科中第一个示例图像的代码:
static List<IntVector2> GetBrushCircleCoords(int x0, int y0, int radius)
{
List<IntVector2> coords = new List<IntVector2>();
int x = radius;
int y = 0;
int err = 0;
while (x >= y)
{
coords.Add(new IntVector2(x0 + x, y0 + y));
coords.Add(new IntVector2(x0 + y, y0 + x));
coords.Add(new IntVector2(x0 - y, y0 + x));
coords.Add(new IntVector2(x0 - x, y0 + y));
coords.Add(new IntVector2(x0 - x, y0 - y));
coords.Add(new IntVector2(x0 - y, y0 - x));
coords.Add(new IntVector2(x0 + y, y0 - x));
coords.Add(new IntVector2(x0 + x, y0 - y));
y += 1;
err += 1 + 2 * y;
if (2 * (err - x) + 1 > 0)
{
x -= 1;
err += 1 - 2 * x;
}
}
return coords;
}