如何画出一个圆圈?

bet*_*eta 4 c c++

我正在根据我的C代码的规范创建位图/ bmp文件,我想在我的位图上绘制简单的基元.以下代码显示了如何在位图上绘制矩形:

if(curline->type == 1) // draw a rectangle
{
    int xstart = curline->x;
    int ystart = curline->y;
    int width = curline->width + xstart;
    int height = curline->height + ystart;

    int x = 0;
    int y = 0;

    for(y = ystart; y < height; y++)
    {
      for(x = xstart; x < width; x++)
      {
        arr[x][y].blue = curline->blue;
        arr[x][y].green = curline->green;
        arr[x][y].red = curline->red;
      }
    }

    printf("rect drawn.\n");
}

...
save_bitmap();
Run Code Online (Sandbox Code Playgroud)

示例输出: 在此输入图像描述

所以基本上我为给定的x和y字段中的所有像素设置红色,绿色和蓝色值.

现在我想知道它的中点和半径来填充一个圆圈.但是我如何知道这个圆圈内的像素和哪些像素不是?任何帮助将不胜感激,感谢阅读.

小智 10

如果从点到圆心的距离小于圆的半径,则点位于圆的边界内.

考虑一个点(x1,y1)与具有中心(x2,y2)和半径r的圆相比较:

int dx = x2 - x1; // horizontal offset
int dy = y2 - y1; // vertical offset
if ( (dx*dx + dy*dy) <= (r*r) )
{
    // set pixel color
}
Run Code Online (Sandbox Code Playgroud)

  • 作为练习,您可能希望尝试对边缘进行消除锯齿.这意味着要考虑像素的宽度,并在像素非常接近但不完全在圆内时对边界进行着色. (2认同)