Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.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
Javascript 在二维长方体中查找所有自由矩形区域,其中包含随机定位的障碍物_Javascript_Algorithm_Geometry_Rectangles - Fatal编程技术网

Javascript 在二维长方体中查找所有自由矩形区域,其中包含随机定位的障碍物

Javascript 在二维长方体中查找所有自由矩形区域,其中包含随机定位的障碍物,javascript,algorithm,geometry,rectangles,Javascript,Algorithm,Geometry,Rectangles,我有一个预定义大小的矩形区域,里面有一些其他的矩形,它表示填充区域,或者说,障碍物 所有矩形都是轴对齐的。 轴(即0,0)的原点位于左上角。 所有矩形的X和Y坐标以及水平和垂直尺寸都是已知的 关于主区域内矩形的信息包含在已排序的数组中,其中i[0],i[1]是左上角的X,Y坐标,i[2],i[3]分别是X和Y尺寸: [ [10,1,14,7], [34,1,14,15], [16,22,27,44] ] 我怎样才能得到覆盖剩余空间的所有矩形,如下图所示 (字幕:Jukk

我有一个预定义大小的矩形区域,里面有一些其他的矩形,它表示填充区域,或者说,障碍物

所有矩形都是轴对齐的。 轴(即0,0)的原点位于左上角。 所有矩形的X和Y坐标以及水平和垂直尺寸都是已知的

关于主区域内矩形的信息包含在已排序的数组中,其中
i[0],i[1]
是左上角的X,Y坐标,
i[2],i[3]
分别是X和Y尺寸:

[
    [10,1,14,7],
    [34,1,14,15],
    [16,22,27,44]
]
我怎样才能得到覆盖剩余空间的所有矩形,如下图所示

(字幕:Jukka Jylänki,《包装箱子的一千种方法——二维矩形箱子包装的实用方法》)

我不需要一个优化装箱的算法,因为已经放置了矩形,也不需要找到最大的矩形,但我知道这些可能是相关的参数

我也读过一些关于线扫描算法的文章,但我无法得到一个有效的实现,因此我无法想象这是否是解决我问题的正确方法

我的第一次尝试(显然是错误的)是收集所有边生成的所有切割(反向交点):

…但这需要额外的步骤来连接相邻的矩形,然后过滤掉较大矩形中的矩形。例如,请参见本图中红色标记的矩形:



这可能是一种方式,尽管没有优化

我不知道你为什么说“显然错了”——你已经建立了一组矩形,覆盖了三个给定矩形留下的自由空间。现在,如果你想要一个“更好”的解决方案(无论在何种意义上),你需要说什么算是“更好”……顺便说一句,你也能做到吗?@AakashM:我不会谈论“更好”的解决方案——我无法得到正确的解决方案,这就是Jukka的图片中的解决方案。例如,在你提到的问题中,这将是[C1,C3],[A2,C3],[A2,B4]啊,好的,你想要覆盖而不是分割。我不知道你为什么说“明显错误”——你已经建立了一组矩形,覆盖了三个给定矩形留下的自由空间。现在,如果你想要一个“更好”的解决方案(无论在何种意义上),你需要说什么算是“更好”……顺便说一句,你也能做到吗?@AakashM:我不会谈论“更好”的解决方案——我无法得到正确的解决方案,这就是Jukka的图片中的解决方案。例如,在你提到的问题中,这将是[C1,C3],[A2,C3],[A2,B4]啊,好的,你想要覆盖而不是分割。
[
    [24,8,37,8],
    [1,16,60,6],
    [1,22,15,44],
    [43,22,18,44],
    [1,66,60,5],
    [1,1,9,70],
    [10,16,6,55],
    [24,1,10,21],
    [34,8,9,14],
    [43,8,5,63],
    [48,1,13,70]
]