2012-12-17 166 views
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(); 

输出示例: enter image description here

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

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

+2

bool b = x * x + y * y tp1

回答

9

如果从点到圆心的距离小于圆的半径,则点位于圆的范围内。

考虑一个点(X1,Y1)相较于中心(x2,y2),半径为r的圆:

+0

谢谢,这工作完美无瑕。我从来没有想到它实际上会很容易计算像素来填充! – beta

+2

作为练习,您可能需要尝试对边缘进行消除锯齿。这意味着要考虑像素的宽度,并在像素非常接近但不完全位于圆内时遮挡边界。 – paddy

3

您也可以尝试中点算法,here维基百科。

+0

感谢这个有用的链接,+1! – beta