【问题标题】:java, determine if circle is inside an areajava,判断圆是否在一个区域内
【发布时间】:2014-03-10 04:01:59
【问题描述】:

您好,我是编程新手,我正在尝试用 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 坐标的 Point,mRadius 是圆的半径,width 和 height 是区域的宽度/高度

谢谢

【问题讨论】:

  • 你的代码能编译吗?你的 else 块中缺少一个括号。
  • 我发现对于这样的问题,最好先将您要单独测试的每个条件写成它们自己的布尔值,将它们全部打印出来,然后or 将它们全部放在一起以获得结果。然后,您可以尝试一次测试每一项,看看是否获得了预期的输出。这将使您很快缩小问题范围。完成测试后,您可以将它们汇总成一条语句。
  • 也作为一般提示,如果您发现自己的 if else 块仅包含 return truereturn false,您可能只返回用于 @987654329 的条件@块。
  • 错误是什么?最好编写一个小测试程序,在几个示例案例上运行您的函数并检查函数是否返回正确的结果。错误假设:可能存在冲突的坐标系。计算机图形通常将 (0,0) 放在左上角,正 Y 值向下,以方便文本行。 [顺便说一句,尽管一些程序员对成员变量(也称为实例变量)使用像 mX 这样的命名约定,但该约定是针对对象内部的——它不会延续到像 getY() 这样的访问器方法。]
  • 0,0 在左上角?嗯,我认为这可能是错误的尝试,ty Edit pastebin.com/wmvzMqwP,我不明白这段代码,但你能告诉我这段代码是否会将 (0,0) 放在左下角或左上角,如果 y向下

标签: java geometry


【解决方案1】:

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

GraphicsConfiguration#getDefaultTransform():

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

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

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

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

附:与将整个图像传递给setRGB(int startX, int startY, int w, int h, int[] rgbArray, int offset, int scansize)setData(Raster r) 相比,为每个像素调用image.setRGB() 会很慢。通常帧缓冲区保存在一维数组中,该数组被视为二维数组,scansize 表示此缓冲区中扫描线的宽度。

【讨论】:

    猜你喜欢
    • 2017-10-04
    • 2022-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多