Javascript 在二维长方体中查找所有自由矩形区域,其中包含随机定位的障碍物
我有一个预定义大小的矩形区域,里面有一些其他的矩形,它表示填充区域,或者说,障碍物 所有矩形都是轴对齐的。 轴(即0,0)的原点位于左上角。 所有矩形的X和Y坐标以及水平和垂直尺寸都是已知的 关于主区域内矩形的信息包含在已排序的数组中,其中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
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]
]