我是编程的新手,我试图在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是圆半径,宽度和高度是区域的宽度/高度
感谢
答案 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
表示此缓冲区内扫描线的宽度。