Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.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
C++ 如何检查n个给定分幅中的任何一个是否重叠_C++ - Fatal编程技术网

C++ 如何检查n个给定分幅中的任何一个是否重叠

C++ 如何检查n个给定分幅中的任何一个是否重叠,c++,C++,问题是: 我有发言权。我得到了一个由n个瓦片组成的数组,这些瓦片由左下角和右上角(x1,y1,x2,y2)的坐标定义。我必须检查任何两个瓷砖是否重叠。最快的算法是什么?我假设您将按x或y(或其他方式)对数组进行排序,但我不知道如何继续。 提前谢谢你 编辑:只是澄清一下,我知道如何检查两个瓷砖是否重叠,我需要的是快速检查所有瓷砖。最简单的解决方案是检查每个瓷砖组合,但这是在浪费时间和资源,我想知道最快的方法是什么。您有两个类似的块: blockA = {x1, y1, x2, y2} blockB

问题是: 我有发言权。我得到了一个由n个瓦片组成的数组,这些瓦片由左下角和右上角(x1,y1,x2,y2)的坐标定义。我必须检查任何两个瓷砖是否重叠。最快的算法是什么?我假设您将按x或y(或其他方式)对数组进行排序,但我不知道如何继续。 提前谢谢你


编辑:只是澄清一下,我知道如何检查两个瓷砖是否重叠,我需要的是快速检查所有瓷砖。最简单的解决方案是检查每个瓷砖组合,但这是在浪费时间和资源,我想知道最快的方法是什么。

您有两个类似的块:

blockA = {x1, y1, x2, y2}
blockB = {x3, y3, x4, y4}
然后呢,

(blockA.x1 - blockB.x4) * (blockA.x2 - blockB.x3) = X
(blockA.y1 - blockB.y4) * (blockA.y2 - blockB.y3) = Y

如果X<0和Y<0,则重叠。

您可以搜索“碰撞检测AABB”(轴对齐边界框),因为您的问题听起来像是AABB CD解决了。我会查找它,谢谢。blockA和blockB可以更改,如B-A。A-B或B-A都是您的选择。