Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/242.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php-检查矩形是否重叠_Php_Intersection_Rectangles - Fatal编程技术网

Php-检查矩形是否重叠

Php-检查矩形是否重叠,php,intersection,rectangles,Php,Intersection,Rectangles,我使用下面提到的代码来找出图像贴图上的矩形是否相交或重叠,但我得到了错误的结果。Y坐标从顶部向底部增加。矩形的尺寸各不相同 $r1 = array('MapX1' => 10, 'MapX2' => 10, 'MapY1' => 30, 'MapY2' => 30); $r2 = array( 'MapX1' => 20, 'MapX2' => 20, 'MapY1' => 50, 'MapY2' => 50); function interse

我使用下面提到的代码来找出图像贴图上的矩形是否相交或重叠,但我得到了错误的结果。Y坐标从顶部向底部增加。矩形的尺寸各不相同

$r1 = array('MapX1' => 10, 'MapX2' => 10, 'MapY1' => 30, 'MapY2' => 30);
$r2 = array( 'MapX1' => 20, 'MapX2' => 20, 'MapY1' => 50, 'MapY2' => 50);

function intersectRect($r1, $r2) {
        /*
        left: x1,
        right: x1 + x2,
        top: y1,
        bottom: y1 + y2,
      */

$r1['MapX2'] = $r1['MapX2'] - $r1['MapX1'];
$r2['MapX2'] = $r2['MapX2'] - $r2['MapX1'];

$r1['MapY1'] = $r1['MapY2'] - $r1['MapY1'];
$r2['MapY2'] = $r1['MapY2'] - $r1['MapY1'];

        $a = array('left' => $r1['MapX1'], 'right' => $r1['MapX1'] + $r1['MapX2'], 'top' => $r1['MapY1'], 
            'bottom' => $r1['MapY1'] + $r1['MapY2']);
        $b = array('left' => $r2['MapX1'], 'right' => $r2['MapX1'] + $r2['MapX2'], 'top' => $r2['MapY1'], 
            'bottom' => $r2['MapY1'] + $r2['MapY2']);
        if(
            $a['right'] < $b['left'] || 
            $a['left'] > $b['right'] || 
            $a['bottom'] < $b['top'] || 
            $a['top'] > $b['bottom']
          ){ 
            return 0;
    }
    else{
        return 1;
    }
}

echo intersectRect($r1, $r2);

在聊天中发表评论和讨论后,您似乎希望
X2
Y2
值是坐标,但您的代码将它们分别视为宽度和高度

如果希望代码将其视为坐标,则代码将更改为以下内容:

$r1 = array('MapX1' => 536, 'MapX2' => 567, 'MapY1' => 199, 'MapY2' => 237);
$r2 = array( 'MapX1' => 430, 'MapX2' => 453, 'MapY1' => 141, 'MapY2' => 153);

function intersectRect($r1, $r2) {
    /*
    left: x1,
    right: x2,
    top: y1,
    bottom: y2,
  */

    $a = array('left' => $r1['MapX1'], 'right' => $r1['MapX2'], 'top' => $r1['MapY1'], 
        'bottom' => $r1['MapY2']);
    $b = array('left' => $r2['MapX1'], 'right' => $r2['MapX2'], 'top' => $r2['MapY1'], 
        'bottom' => $r2['MapY2']);
    if(
        $a['right'] < $b['left'] || 
        $a['left'] > $b['right'] || 
        $a['bottom'] < $b['top'] || 
        $a['top'] > $b['bottom']
      ){ 
        return 0;
    } else {
        return 1;
    }
}

echo intersectRect($r1, $r2);
$r1=数组('MapX1'=>536,'MapX2'=>567,'MapY1'=>199,'MapY2'=>237);
$r2=数组('MapX1'=>430,'MapX2'=>453,'MapY1'=>141,'MapY2'=>153);
函数intersectRect($r1,$r2){
/*
左:x1,
右:x2,
顶部:y1,
底部:y2,
*/
$a=数组('left'=>$r1['MapX1'],'right'=>$r1['MapX2'],'top'=>$r1['MapY1'],
“底部”=>1美元[“地图2]”);
$b=数组('left'=>$r2['MapX1'],'right'=>$r2['MapX2'],'top'=>$r2['MapY1'],
“底部”=>r2美元[“地图2]”);
如果(
$a[“右”]<$b[“左”]|
$a[“左”]>$b[“右”]|
$a['bottom']<$b['top']|
$a['top']>$b['bottom']
){ 
返回0;
}否则{
返回1;
}
}
echo intersectRect($r1,$r2);

请注意,我已经更改了声明
$a
$b
的代码,以便它直接获取
X2
Y2
值,而不是将它们添加到
X1
Y1
值中。我还使用了您在编辑问题时添加的矩形,而不是您定义的原始矩形。

在您对chat的评论和讨论之后,您似乎希望
X2
Y2
值是坐标,但您的代码将它们分别视为宽度和高度

如果希望代码将其视为坐标,则代码将更改为以下内容:

$r1 = array('MapX1' => 536, 'MapX2' => 567, 'MapY1' => 199, 'MapY2' => 237);
$r2 = array( 'MapX1' => 430, 'MapX2' => 453, 'MapY1' => 141, 'MapY2' => 153);

function intersectRect($r1, $r2) {
    /*
    left: x1,
    right: x2,
    top: y1,
    bottom: y2,
  */

    $a = array('left' => $r1['MapX1'], 'right' => $r1['MapX2'], 'top' => $r1['MapY1'], 
        'bottom' => $r1['MapY2']);
    $b = array('left' => $r2['MapX1'], 'right' => $r2['MapX2'], 'top' => $r2['MapY1'], 
        'bottom' => $r2['MapY2']);
    if(
        $a['right'] < $b['left'] || 
        $a['left'] > $b['right'] || 
        $a['bottom'] < $b['top'] || 
        $a['top'] > $b['bottom']
      ){ 
        return 0;
    } else {
        return 1;
    }
}

echo intersectRect($r1, $r2);
$r1=数组('MapX1'=>536,'MapX2'=>567,'MapY1'=>199,'MapY2'=>237);
$r2=数组('MapX1'=>430,'MapX2'=>453,'MapY1'=>141,'MapY2'=>153);
函数intersectRect($r1,$r2){
/*
左:x1,
右:x2,
顶部:y1,
底部:y2,
*/
$a=数组('left'=>$r1['MapX1'],'right'=>$r1['MapX2'],'top'=>$r1['MapY1'],
“底部”=>1美元[“地图2]”);
$b=数组('left'=>$r2['MapX1'],'right'=>$r2['MapX2'],'top'=>$r2['MapY1'],
“底部”=>r2美元[“地图2]”);
如果(
$a[“右”]<$b[“左”]|
$a[“左”]>$b[“右”]|
$a['bottom']<$b['top']|
$a['top']>$b['bottom']
){ 
返回0;
}否则{
返回1;
}
}
echo intersectRect($r1,$r2);

请注意,我已经更改了声明
$a
$b
的代码,以便它直接获取
X2
Y2
值,而不是将它们添加到
X1
Y1
值中。我还使用了您在编辑问题时添加的矩形,而不是您定义的原始矩形。

if语句似乎将从上到下比较了两次,而不是第二次从左到右比较。@MartinCook请看一看。我现在已经编辑了代码。@cartina你得到了什么结果,你期望得到什么结果?根据我的计算,这个矩形应该返回1-这就是你得到的吗?在这个例子中,这些矩形应该是1还是0?@cartina我想你有点困惑了-你是X2,Y2值实际上是宽度和高度值,不是X2和Y2坐标。if语句似乎将从上到下比较两次,而不是第二次从左到右比较。@MartinCook请看一看。我现在已经编辑了代码。@cartina你得到了什么结果,你期望得到什么结果?根据我的计算,这个矩形应该返回1-这就是你得到的吗?在这个例子中,这些矩形应该是1还是0?@cartina我想你有点困惑了-你的X2和Y2值实际上是宽度和高度值,而不是X2和Y2坐标。