绘制具有中心和半径的圆圈

时间:2014-02-04 14:18:02

标签: java graph geometry raster coords

我目前正在使用WritableRaster和它的setPixed方法,我需要它不仅设置一个像素,而是设置半径为r的“圆”。 我在想的是这样的事情:

for(int y = -r; y < r; y++)
{
    for(int x = -r; x < r; x++)
    {
         raster.setPixel(x,y,color);
 }}

问题是,这是否可以制作一个圆圈,如果是这样,我将如何让它通过内部的所有像素?

提前致谢!

编辑:对不起,我没有说清楚 - 我在透明画布上制作橡胶工具,因此,如果我画一个透明色的圆圈,它将不会删除之前的那些......这就是为什么我正在使用setPixel。

编辑编辑:这是代码的输出(在g2d上,使用具有相同值的drawLine,因此它只填充方法setPixel中的一个像素): http://i.imgur.com/a5QNMuX.png?1

编辑编辑编辑:如果有人想出于同样的原因使用此代码,我建议使用BufferedImage.setRGB(),因为它更快。如果您不知道如何处理颜色(最后一个参数),请使用以下内容:

...
buffImg.setRGB(x,y,new Color(r,g,b,a).getRGB());
...

1 个答案:

答案 0 :(得分:1)

您必须单独填写每一行,但请注意,您必须调整半径x的范围。这有点类似于进行2D(离散)集成。基本思路是x^2 + y^2 = r^2位于外边界,yr都是固定的,所以......:

for(int y = -r; y < r; y++)
{
    int bound = (int)(sqrt(r * r - y * y) + 0.5);
    for(int x = -bound; x < bound; x++)
    {
         raster.setPixel(x,y,color);
    }
}

... + 0.5是一种安全的方法来舍入到最接近的整数(而不是仅仅使用floor进行投射),因为bound将始终为正。