4

我正在使用我的 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();

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

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

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

4

2 回答 2

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
}
于 2012-12-17T19:23:34.407 回答
3

您也可以在维基百科上尝试中点算法

于 2012-12-17T19:28:06.640 回答