2

我有两个坐标对,存储为名为ap1 {x:x, y:y}和的对象ap2 {x:x, y:y}。我正在尝试创建一个 if 语句,以查看它们是否完全符合以下条件之一:

  • 一个是与另一个在任何方向上的一个空间对角线
  • 一个是在另一个之上或之下的一个空间

到目前为止,以下是我的代码:

if((ap1.x == ap2.x &&(ap1.y == ap2.y + 1 && ap1.x == ap2.x || ap2.y == ap1.y + 1)) 
   || (ap1.x == ap2.x + 1 && ap1.y == ap2.y + 1) 
   || (ap2.x == ap1.x + 1 && ap2.y == ap1.y + 1)
   || (ap1.x == ap2.x - 1 && ap1.y == ap2.y - 1) 
   || (ap2.x == ap1.x - 1 && ap2.y == ap1.y - 1))

但是这样一来,正方形的左下角或右上角的一个空格就不会返回 true。我怎样才能按照我想要的方式制作这个功能?这是一张图片:

我尝试了对我的代码的另一种修改,它也不起作用:

if(ap1.y == ap2.y + 1||ap1.y == ap2.y - 1||(ap1.x == ap2.x + 1 && ap1.y == ap2.y + 1)||(ap1.x == ap2.x - 1 && ap1.y == ap2.y - 1))
4

2 回答 2

2

为了便于理解,您可以像这样分开条件:

var aboveOrBelow = ap1.y == ap2.y + 1 || ap1.y == ap2.y - 1;
var leftToRight = ap1.x >= ap2.x - 1 && ap1.x <= ap2.x + 1;

if (aboveOrBelow && leftToRight) {
}
于 2014-06-21T11:57:17.917 回答
0

看它的顶部是一个矩形,底部是一个矩形y。然后对于x位置,它将与 相同ap1,或者向右或向左一个。

if(((ap1.y == ap2.y + 1) || (ap1.y == ap2.y - 1)) // 1 above or bellow
    && (ap1.x == ap2.x - 1) || (ap1.x == ap2.x) || (ap1.x == ap2.x + 1)) // 3 rect points
于 2014-06-21T12:01:12.407 回答