如何在网格上画圆?

13

我正在制作一个所有移动都基于网格的游戏。我还想制作一些可以在圆形路径上移动的实体。 有没有人有关于如何在由方块组成的网格中创建圆形的建议(例如,像MS Paint使用圆形工具将正方形像素制作成圆形)。

2个回答

16

3

这是我用Java实现的Bresenham中点圆算法:

private void drawCircle(final int centerX, final int centerY, final int radius) {
    int d = 3 - (2 * radius);
    int x = 0;
    int y = radius;
    Color circleColor = Color.white;

    do {
        image.setPixel(centerX + x, centerY + y, circleColor);
        image.setPixel(centerX + x, centerY - y, circleColor);
        image.setPixel(centerX - x, centerY + y, circleColor);
        image.setPixel(centerX - x, centerY - y, circleColor);
        image.setPixel(centerX + y, centerY + x, circleColor);
        image.setPixel(centerX + y, centerY - x, circleColor);
        image.setPixel(centerX - y, centerY + x, circleColor);
        image.setPixel(centerX - y, centerY - x, circleColor);
        if (d < 0) {
            d = d + (4 * x) + 6;
        } else {
            d = d + 4 * (x - y) + 10;
            y--;
        }
        x++;
    } while (x <= y);
}

您可以在Rosetta Code网站上找到完整的类实现以及许多其他语言示例。点击此处查看。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接