0
아래의 코드를 사용하여 이미지 맵상의 직사각형이 교차하는지 또는 겹치는지를 확인하지만 잘못된 결과가 나타납니다. Y 좌표는 위에서 아래로 증가합니다. 직사각형의 크기는 다양합니다.PHP - 직사각형이 겹치는 지 확인하십시오.
$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);
내가 여기서 잘못하고있는 것을 알아내는 데 도움이 될까요?
위의 코드는 아래 사각형에 대한 올바른 작동하지 않습니다 1 부여하지만 여러분의 의견과 채팅에 대한 토론 후 0
$r1 = array(
[MapX1] => 536
[MapX2] => 567
[MapY1] => 199
[MapY2] => 237
)
$r2 = array
(
[MapX1] => 430
[MapX2] => 453
[MapY1] => 141
[MapY2] => 153
)
if 문은 왼쪽에서 오른쪽으로 두 번째 비교하는 대신 위에서 아래로 두 번 비교하는 것처럼 보입니다. –
@MartinCook보세요. 지금 코드를 편집했습니다. – cartina
@cartina 어떤 결과를 얻고 있으며 어떤 결과를 기대합니까? 내 계산에서 볼 때, 이것은 사각형에 1을 반환해야하는 것으로 보입니다. – crazyloonybin