java,确定圆是否在区域内

时间:2014-03-10 04:01:59

标签: java geometry

我是编程的新手,我试图在java中编写算法来确定圆是否在矩形区域

我有圆的半径和中间的点(中心)

|_____________________________________________________
|   
|  
|  
|                     circle
|   
|  
|  
|  
|(0,0)________________________________________________

左下角代表坐标(0,0)

这是我到目前为止所得到的,但我知道我在某个地方找不到错误

if (mCenter.getmX() + mRadius > width || 
    mCenter.getmY() + mRadius > height ||
    mCenter.getmX() - mRadius < 0 ||
    mCenter.getmY() - mRadius < 0) {
        return false; //not inside area
    }  
else { return true; }

在此代码中,mCenter是一个带有x和y坐标的点,mRadius是圆半径,宽度和高度是区域的宽度/高度

感谢

1 个答案:

答案 0 :(得分:1)

您没有说出症状是什么,但上面的有用图表使用普通的数学坐标系,而您发布的代码使用awt.image.BufferedImage。 Swing和大多数2D计算机图形系统使用不同的坐标系统,以便按阅读顺序布置内容。

GraphicsConfiguration#getDefaultTransform()

  

默认定义的坐标空间中的坐标   屏幕和打印机设备的AffineTransform起源于   设备目标区域的左上角,带X.   坐标增加到右边,Y坐标增加   向下。

我认为可以使用不同的变换设置GraphicsConfiguration。 (我不知道怎么做。)awt.image.BufferedImage不是这样:

  

所有BufferedImage对象的左上角坐标为(0,0)。

javax.swing.SwingUtilities有坐标转换方法。

P.S。与将整个图片传递到image.setRGB()setRGB(int startX, int startY, int w, int h, int[] rgbArray, int offset, int scansize)相比,为每个像素调用setData(Raster r)会很慢。通常,帧缓冲区保存在1-D阵列中,该阵列被视为2-D阵列,scansize表示此缓冲区内扫描线的宽度。