如何在网格上制作圆圈?

时间:2009-06-20 18:27:50

标签: algorithm geometry

我正在制作一个所有动作都以网格为基础的游戏。我也不想制作可以绕圈旅行的实体。那么有没有人建议用正方形网格创建一个圆圈(就像MS Paint使用圆形工具制作一个方形像素圆圈的方式)。

2 个答案:

答案 0 :(得分:14)

答案 1 :(得分:3)

这是我对Bressenham的Midpoint Circle算法的Java实现;

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网站上找到完整的类实现和许多其他语言示例; http://rosettacode.org/wiki/Bitmap/Midpoint_circle_algorithm