考虑一个随机填充线条的区域(2D)(如下图所示)。我们对以以下方式填充包括四个边界边的线之间的空白感兴趣:

0-最大化包裹的大小; 1-填充包裹的形状为水平或垂直对齐的正方形; 2-形状填充包裹的形状是正方形,即松弛对齐; 3-填充包裹的形状是任何四边形。我们最初的问题

因此,目前存在三种不同的情况。请注意,这些行的形式为[x1,y1,x2,y2]点集,即实数。

[* * *]可能的解决方案/算法/代码片段/等都非常受欢迎。




更新1:我们可以为第一种情况管理解决方案:步骤是:1-线2-将线光栅化为位图3-使用目标函数在附近的单元中搜索所需颜色(即相同颜色)的每个单元,以最大化面积(即单元数)。

它很好用,但是它只涵盖第一种情况,而且速度也很慢。


更新2:
我们认为读者很熟悉与空间填充平铺的概念。您可以点击链接获取灵感。但是请注意,我们的问题有所不同。由于我们不会随机填充空白空间,因此不会随机选择尺寸。解决方案应该是迭代的。对于所有情况,所装包裹的数量没有限制。实际上,由用户来限制迭代次数,例如,通过选择包裹的最小面积。在上面给出的示例中,这是显而易见的,在该示例中,我们将行离散为具有指定大小的像素。也就是说,该过程应一直运行到按照标准(例如包裹的最大面积)填满整个空白区域。


更新3:摘要:
一种应用是找出严重断裂的“矿”中可提取的完整“岩石”块的分布。这对于包括钻探设计,财务评估等在内的许多方面都非常有帮助。描述:
对于装饰性岩石(石头)矿山来说,产品是将完整的岩石块切成矩形立方体,价格与块的大小。如果剩余部分的数量尽可能少,则希望从合适的区域,即没有大的裂缝中提取块。通常,小块岩石相对没有经济价值,因此被视为浪费。
本文中的问题探讨了解决此类问题的方法。

问题的数学视图可以描述如下:2D:查找可以从给定2D区域中提取的所有矩形,并为某些较大的矩形尺寸优化一些线。3D:查找所有矩形可以从给定的3D区域中提取的多维数据集,其中一些子平面(更好的是多边形)已针对可能的较大块尺寸进行了优化。


由于这是正在进行的研究的一部分,因此以下注释中提出的某些问题没有我们可以提供的某些答案。我们认为,到目前为止提供的信息确实足以了解问题的整体情况。尽管如此,我们还是提供了一些细节,以便为社区带来利益。
您可能会对最终问题的解决方案设置一些限制,尽管我们相信以后总是可以添加更多内容。例如,请遵循以下步骤:在上述条件下要提取的块的最佳大小(经济上最佳的矩形)为1x1 m(示例中的区域为10x10 m)。这是基于经济价值定义的一个约束。切割等的最小可用尺寸为0.15x0.15 m;所以这是第二个尺寸限制。
上图显示了取决于块大小的经济价值函数。因此,对于这种特殊情况,每个小于0.15x0.15 m的岩石块都是浪费。由于操作限制,不会有大于1.7x1.7 m的块大小。

评论

@ R.K。 - 我不同意。他/他已经非常清楚地陈述了他们在寻找什么。当然,有多种可能的解决方案,但是没有什么可以阻止它们全部有用并投赞成票的。

由于这是一个数学运算可能很繁重的算法问题,因此您可能需要尝试-math.stackexchange.com

密切相关:gis.stackexchange.com/questions/27303。当前的问题,@ R.K。注意,因为没有足够好的姿势,所以没有确切的答案。允许多少个矩形? “最大化大小”是什么意思?还要注意,这也不是“随机平铺”的问题:线条仅通过其补余确定可以占用的区域;解决方案绝对不会是随机的。还请注意,可以立即提供一个简单的简化方法:可以在补语的每个组成部分中分别解决问题。

@whuber:好吧,我们感兴趣的一个应用是找出在严重断裂的“矿”中可提取的完整“岩石”块的分布。好吧,我们认为GIS似乎有望解决这个问题。我们也将此添加到问题中。我们猜想,GIS社区可能会因其相关的其他特定问题而从中受益。无论如何,如果要迁移,则取决于您;)

正如@whuber所建议的那样,这并不是一个真正的GIS问题(尽管我在这里没有被问到这个问题。)如果能在计算几何或优化论坛上得到答案,您会很幸运。

#1 楼

我有一个想法,您如何使用FME(由Safe Software提供)从大块到小块进行迭代工作。为了记录,我不为他们工作,但似乎对他们的工具赞不绝口...


在感兴趣的区域上使用“ BoundingBoxReplacer”。
将其重新投影到局部坐标系(以后需要以英尺/米为单位“平铺”时)。
缓冲线与“缓冲”变压器。您只需要一个任意大小,例如0.01英尺/米。我们在这里寻找的是下一步的线的多边形。
添加一个“ Tiler”变压器。以英尺或米为单位指定较大的(估计的或其他的)图块大小。我们在这里所做的是将感兴趣的区域划分为正方形块。取决于数据集,从大开始才能真正获得大的离群值。
添加一个“ Clipper”变压器。我们在这里所做的本质上是对数据集进行切片,以查看哪些图块是好是坏。在输出中,“内部”的图块太大。但是,“外侧”的瓷砖足够大,可以切割...
这里很复杂,但并不难...我们将循环变压器,以便我们重新使用原始的BoundingBox,但剪切掉已经准备好进行切割的区域。因此,添加一个Clipper并将Clipper路由为早期Clipper输出上的“ Output”图块。现在我们有了一个可以再次使用的多边形。
再次使用tiler,这次指定一个较小的tile。例如,如果您之前使用了100米的瓷砖,请尝试90米。
添加另一个剪切器,输入剪切器是缓冲线,输入剪切器是较小的图块作为输入。

每次使用较小的图块冲洗并重复多次。我已经附上了一个工作台的开始,我将以此作为一种方法。

基于您的(非常详细的)描述,它现在仅适用于您的选项1。尚未花太多时间。

无论如何,这只是我至少要从谷壳中过滤掉小麦的一种方法。