c++ - "Bresenham' s》圆圈算法填充题

标签 c++ algorithm

我已经实现了“Bresenham”(中点)算法来绘制圆圈,并且一切顺利(C++ 和 OpenGL)。

我现在想知道是否可以使用相同的算法来填充圆圈?

以下面几个圈为例:http://imgur.com/S0Qy6用以下算法绘制:

void circle(Point p, int r) {
int x = 0;
int y = r;
int f = 1-r;

// plot vert/horiz points indepedently

while (x<y) {
    x++;

    if (f<0) {
        f += 2*x+1;
    } else {
        y--;
        f += 2*(x-y+1);
    }

    glRecti(p.x+x, p.y+y, p.x+x+1, p.y+y+1);
    // plot other points using 8 way symmetry

    // attempt to fill the circle - didn't go well
    plotLine(Point(p.x, p.y+x), Point(p.x+x, p.y+x));

}

我认为放置填充位的最佳位置是在我的主循环中,因为我想通过 8 向对称再次填充每个象限。所以我添加了我的 plotLine 调用,但我最终得到的是一个奇怪的实心圆:http://imgur.com/jQW7B

如果我对圆圈进行不同的着色,我最终会得到水平条纹而不是实际的实心圆圈 - 我的方法显然是错误的,但我不确定如何解决它。

最佳答案

我不确定,但是从眯着眼睛看你的算法,我期待最后一行看起来更像

plotLine(Point(p.x+x, p.y+x), Point(p.x+x, p.y+y));

(也就是说,从 p.x 向东北 45 度线开始,然后向上移动到您刚刚绘制的圆上的点)。

关于c++ - "Bresenham' s》圆圈算法填充题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5607946/

相关文章:

c++ - 当我尝试使用 tbb 并行我的程序时出现段错误

c++ - 使用 STL 的列表对象

algorithm - Google Jam 2008 资格赛 : B - Train Timetable

mysql - 搜索嵌套集

algorithm - 蛮力模式匹配的正确性论证?

java - 在 64-Win 7 上的 32 位 JVM 中读取 C++ 中的 JNI-ByteBuffer 时发生访问冲突

c++ - 在导出类中使用 std::unique_ptr

c++ - 如何使用 Rcpp 公开抽象类的指针?

javascript - 为什么 $(someElement).height() 永远不会为我正确计算高度?

java - 用 ANN 求解 XOR 的进化算法的改进