测试Point是否位于区域内

时间:2018-02-01 03:19:53

标签: java

我正在尝试创建一个代码来测试一个点是否在一个矩形的边。并且出于某种原因无论如何它都解决了错误。

所以给像一个矩形尺寸leftSide,topSide,recWidth,recHeight

我想测试它是否在ptX和ptY中,所以我有:

  if(ptX >= leftSide|| ptX > (lefSide + recWidth) || ptY < topSide|| ptY < (topSid+recHeight)) return false;
  else return true;

  //Sugggested code
  if(ptX >= leftSide && ptX < (leftSide + recWidth) && ptY > topSide && ptY < (topSid + recHeight) return true;

  //Rectange values: left, top,width, height: (-2.5, 2.5, 3.5, 7.5)

你知道我碰巧搞砸了吗?具体来说,它在pt(3,3)上失败了。但它应该在第一个声明正确的情况下返回true吗?监守

2 个答案:

答案 0 :(得分:0)

考虑到这一点, 左边表示最左边的点 Top表示最高点 (左,上)给出左上角 我认为3,3不会落入给定的矩形我调整输入请验证。 以下程序将返回正确的输出:

double ptX = 3;
    double ptY = 3;
    double leftSide = -2.5;
    double topSide = 2.5;
    double height = 3.5;
    double width = 7.5;
    if(ptX >= leftSide && ptX <= leftSide+width && ptY <= topSide  && ptY > topSide - height) {
        return true;
    }
    return false;

答案 1 :(得分:0)

好的,让我们稍微分解一下,让我们从......开始吧。

double leftSide = -2.5;
double recWidth = 3.5;

double topSide = 2.5;
double recHeight = 7.5;

double ptX = 3;
double ptY = 3;

System.out.println(ptX >= leftSide || ptX > (leftSide + recWidth));
System.out.println(ptX >= leftSide);
System.out.println(ptX > (leftSide + recWidth));
  • ptX >= leftSidetrue,好的
  • ptX > (leftSide + recWidth)也是true,好的

但是,这也使得ptX >= leftSide || ptX > (leftSide + recWidth) true ......这不是我们想要的。

此外,true || falsetrue,因此,即使其中一个先前条件为false,比较也会返回true ...不太漂亮。

更好的解决方案是检查值是否介于这两个值之间。

所以,我们可以说......

  • ptX >= leftSidetrue
  • ptX < (leftSide + recWidth)false

然后我们应该使用&&(因为它们都需要truetrue

ptX >= leftSide && ptX < (leftSide + recWidth)返回`false!这是我们真正追求的答案!

现在,基本上,我们需要对y位置执行相同操作,然后将&&这两个结果放在一起,因为除非两个true,否则它不在 JSONObject jsonObject = jsonArray.getJSONObject(L); year[L] = jsonObject.getString("year"); month[L] = jsonObject.getString("month"); day[L] = jsonObject.getString("day"); StartTime[L] = jsonObject.getString("StartTime"); Endtime[L] = jsonObject.getString("Endtime"); Hours[L] = jsonObject.getString("Hours"); final ContentValues event = new ContentValues(); event.put(CalendarContract.Events.CALENDAR_ID, 1); event.put(CalendarContract.Events.TITLE, "WORKING SCHEDULE OF THE WEEK"); event.put(CalendarContract.Events.DESCRIPTION, "selva"); event.put(CalendarContract.Events.EVENT_LOCATION, "chennai"); 的范围内矩形