随机2D线之间的空间填充


23

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

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

因此,目前有三种不同的方案。
请注意,这些线是[x1,y1,x2,y2]点集形式的实数。

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

在此处输入图片说明


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

它运作良好,但是仅涵盖第一种情况,而且速度较慢。


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


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

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


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


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

1
由于这是一个算法问题,可能在数学上非常繁重,您不妨尝试-math.stackexchange.com
GIS-Jonathan,

1
密切相关:gis.stackexchange.com/questions/27303。正如@RK所指出的那样,当前问题尚无定论,因为它的提出不够充分。允许多少个矩形?“最大化大小”是什么意思?还要注意,这也不是“随机平铺”的问题:线条仅通过其补余确定可以占用的区域;解决方案绝对不会是随机的。还要注意,可以立即提供一个简单的简化方法:可以在补语的每个组成部分内分别解决该问题。
ub

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

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

Answers:


2

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

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

每次使用较小的瓷砖冲洗并重复所需的次数。我已经附上了一个工作台的开始,我将使用它作为一种方法。

根据您的描述(非常详细),目前仅适用于选项1。尚未花费太多时间。

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

FME平铺示例

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.