PHP:查找矩阵表中是否有两个位置冲突

PHP:查找矩阵表中是否有两个位置冲突,php,matrix,Php,Matrix,我有一个地图(数组数组),我有位置。每个位置都有起点和终点。每个点都有X和Y 例如: $map = [ ['0,0', '1,0', '2,0', '3,0', '4,0', '5,0', '6,0', '7,0', '8,0', '9,0'], ['0,1', '1,1', '2,1', '3,1', '4,1', '5,1', '6,1', '7,1', '8,1', '9,1'], ['0,2', '1,2', '2,2', '3,2', '4,2', '5,2',

我有一个地图(数组数组),我有位置。每个位置都有起点和终点。每个点都有X和Y

例如:

$map = [
    ['0,0', '1,0', '2,0', '3,0', '4,0', '5,0', '6,0', '7,0', '8,0', '9,0'],
    ['0,1', '1,1', '2,1', '3,1', '4,1', '5,1', '6,1', '7,1', '8,1', '9,1'],
    ['0,2', '1,2', '2,2', '3,2', '4,2', '5,2', '6,2', '7,2', '8,2', '9,2'],
    ['0,3', '1,3', '2,3', '3,3', '4,3', '5,3', '6,3', '7,3', '8,3', '9,3'],
    ['0,4', '1,4', '2,4', '3,4', '4,4', '5,4', '6,4', '7,4', '8,4', '9,4'],
];

$location1 = '1,1,3,3';
$location2 = '7,0,9,1';
$location3 = '2,3,5,4';

hasConflict($location1, $location2);// Returns false = no conflict
hasConflict($location1, $location3);// Returns true = there is conflict


我不确定如何构建
hascafflict()
函数。我可以做嵌套循环并选中每个复选框,但我认为可能有一种数学/更快的方法可以做到这一点。ABCD和EFGH这两个区域何时不冲突

    (A,B)-----+          (E,F)-----+
      |       |            |       |
      +------(C,D)         +------(G,H)
当第一个比第二个更左时(因此CG);当它较低时(因此B>H)

如果它不太左,也不太右,也不太高,也不太低,它必须重叠

在一维中,如果CG,则两个范围(A…C)和(E…G)是不相交的。因此,如果该条件为假,则它们相交,并且((C>=E)&&(A G)为假 C CG为真 A---E---C---G CG是假的 CG是假的 A----E----G----C CG是假的 在二维中,如果X轴和Y轴上都有交点,则区域重叠。因此,冲突的条件是

(D >= F) && (B <= H) && (C >= E) && (A <= G)

(D>=F)和&(B=E)和&(A从另一个角度思考。ABCD和EFGH这两个区域何时不冲突

    (A,B)-----+          (E,F)-----+
      |       |            |       |
      +------(C,D)         +------(G,H)
当第一个比第二个更左时(因此CG);当它较低时(因此B>H)

如果它不太左,也不太右,也不太高,也不太低,它必须重叠

在一维中,如果CG,则两个范围(A…C)和(E…G)是不相交的。因此,如果该条件为假,则它们相交,并且((C>=E)&&(A G)为假 C CG为真 A---E---C---G CG是假的 CG是假的 A----E----G----C CG是假的
在二维中,如果X轴和Y轴上都有交点,则区域重叠。因此,冲突的条件是

(D >= F) && (B <= H) && (C >= E) && (A <= G)

(D>=F)和&(B=E)和&(A我喜欢@LSemi的数学解释,它应该被标记为解决方案。但是我已经编写了PHP代码,所以我也发布了它

function hasConflict($location1,$location2){
    $location1=explode(',',$location1);
    $location2=explode(',',$location2);
    if($location1[0]>=$location2[0]&&$location1[0]<=$location2[2]&&$location1[1]>=$location2[1]&&$location1[1]<=$location2[3]) return true;
    if($location2[0]>=$location1[0]&&$location2[0]<=$location1[2]&&$location2[1]>=$location1[1]&&$location2[1]<=$location1[3]) return true;
    return false;
}

$map = [
    ['0,0', '1,0', '2,0', '3,0', '4,0', '5,0', '6,0', '7,0', '8,0', '9,0'],
    ['0,1', '1,1', '2,1', '3,1', '4,1', '5,1', '6,1', '7,1', '8,1', '9,1'],
    ['0,2', '1,2', '2,2', '3,2', '4,2', '5,2', '6,2', '7,2', '8,2', '9,2'],
    ['0,3', '1,3', '2,3', '3,3', '4,3', '5,3', '6,3', '7,3', '8,3', '9,3'],
    ['0,4', '1,4', '2,4', '3,4', '4,4', '5,4', '6,4', '7,4', '8,4', '9,4'],
];

$location1 = '1,1,3,3';
$location2 = '7,0,9,1';
$location3 = '2,3,5,4';

var_dump(hasConflict($location1, $location2));// Returns false = no conflict
var_dump(hasConflict($location1, $location3));// Returns true = there is conflict
函数有冲突($location1,$location2){
$location1=爆炸(“,”,$location1);
$location2=爆炸(“,”,$location2);

如果($location1[0]>=$location2[0]&$location1[0]=$location2[1]&&$location1[1]=$location1[0]&$location2[0]=$location1[1]&&$location2[1]我喜欢@LSemi的数学解释,它应该被标记为解决方案。但是我已经编写了PHP代码,所以我也发布了它

function hasConflict($location1,$location2){
    $location1=explode(',',$location1);
    $location2=explode(',',$location2);
    if($location1[0]>=$location2[0]&&$location1[0]<=$location2[2]&&$location1[1]>=$location2[1]&&$location1[1]<=$location2[3]) return true;
    if($location2[0]>=$location1[0]&&$location2[0]<=$location1[2]&&$location2[1]>=$location1[1]&&$location2[1]<=$location1[3]) return true;
    return false;
}

$map = [
    ['0,0', '1,0', '2,0', '3,0', '4,0', '5,0', '6,0', '7,0', '8,0', '9,0'],
    ['0,1', '1,1', '2,1', '3,1', '4,1', '5,1', '6,1', '7,1', '8,1', '9,1'],
    ['0,2', '1,2', '2,2', '3,2', '4,2', '5,2', '6,2', '7,2', '8,2', '9,2'],
    ['0,3', '1,3', '2,3', '3,3', '4,3', '5,3', '6,3', '7,3', '8,3', '9,3'],
    ['0,4', '1,4', '2,4', '3,4', '4,4', '5,4', '6,4', '7,4', '8,4', '9,4'],
];

$location1 = '1,1,3,3';
$location2 = '7,0,9,1';
$location3 = '2,3,5,4';

var_dump(hasConflict($location1, $location2));// Returns false = no conflict
var_dump(hasConflict($location1, $location3));// Returns true = there is conflict
函数有冲突($location1,$location2){
$location1=爆炸(“,”,$location1);
$location2=爆炸(“,”,$location2);

如果($location1[0]>=$location2[0]&$location1[0]=$location2[1]&&$location1[1]=$location1[0]&&$location2[0]=$location1[1]&$location2[1],那么对于案例“2,0,3,1和1,2,4,2”,您的代码应该返回
true
,是吗?你是对的。我忘记了一些条件。编辑。谢谢。对于“2,0,3,1和1,2,4,2”的情况,你的代码应该返回
true
,不是吗?你是对的。我忘记了一些条件。编辑。谢谢。