如何在不规则间隔的网格或缺少数据的数组中填入“洞”?

时间:2011-02-12 02:16:11

标签: delphi delphi-2007 statistics

有没有人有一个直接使用Delaunay填充网格的Delphi示例 三角形还是克里金?这两种方法都可以通过'插值'来填充网格。

我想做什么?我有一个网格,类似于:

22  23  xx  17  19  18 05  
21  xx  xx  xx  17  18 07  
22  24  xx  xx  18  21 20  
30  22  25  xx  22  20 19  
28  xx  23  24  22  20 18  
22  23  xx  17  23  15 08  
21  29  30  22  22  17 09 

其中xx表示没有数据的网格单元格以及每个单元格的x,y坐标 众所周知。 kriging和Delaunay三角形都可以提供“缺失”点(当然,这些点都是虚构的,但是合理的值)。

Kriging 是一种填写“缺失”或不可用数据的统计方法 具有“合理”值的网格。你为什么需要它?主要是'轮廓'的 数据。轮廓算法(如CONREC for Delphi http://local.wasp.uwa.edu.au/~pbourke/papers/conrec/index.html)可以对规则间隔的数据进行轮廓绘制。谷歌围绕'kriging'和'Delphi',你最终指向Source Forge上的GEOBLOCK项目(http://geoblock.sourceforge.net/)。 Geoblock基于GSLIB(斯坦福开发的Fortran统计软件包)有许多用于克里金法的Delphi pas单位。但是,所有kriging / delauney单位都依赖于Delphi使用条款中提到的单位。不幸的是,这些“帮助”单元不会与其余的源代码一起发布。看来没有任何克里金单位可以单独使用,也可以没有未发布的辅助单元或在某些情况下未定义的数据类型。

Delaunay三角剖分描述于 http://local.wasp.uwa.edu.au/~pbourke/papers/triangulate/index.html。发表是 一个非常整洁的Delphi示例,它生成“三角形”。不幸的是,我 不知道如何使用静态网格的单位。该示例“动态生成”数据字段。

有没有人让这些单位中的任何一个工作来填补不规则的数据网格?任何代码或提示如何使用现有代码来克服一个简单的网格或使用Delaunay来填补这些漏洞。

2 个答案:

答案 0 :(得分:1)

我写这个作为答案,因为它太长而不适合评论。

假设您的网格确实不规则(您没有给出网格坐标的典型模式的示例),那么三角测量只能部分帮助。一旦你进行了三角测量,你就可以使用三角测量来进行插值,并且可以做出不同的选择。

但是你没有说过你想要插值的内容,你想用插值做什么。

在我看来,您已经要求提供一些代码,但目前尚不清楚您是否知道自己想要什么算法。这真的是你应该问的问题。

例如,由于您似乎没有关于如何进行插值的标准,为什么不为缺失值选择最近的邻居。或者为什么不使用缺失值的总体平均值。这两个选项都符合您指定的所有条件,因为您没有指定任何标准!

真的,我认为你需要花更多的时间来解释你希望这种插值具有什么属性,你将要用它做什么等等。我也认为你应该停止考虑现在的代码并考虑算法。由于您提到的统计数据,您应该考虑在https://stats.stackexchange.com/询问。

答案 1 :(得分:1)

Richard Winston在Embarcadero开发者Newwork Code Central上发布的代码名为

  

Delaunay三角剖分和轮廓编码

(ID:29365)演示了用于生成约束Delaunay三角剖分和基于任意位置处的数据点绘制轮廓线的例程。 Richard's code 。这些算法不会操纵和填充网格中的孔。它们确实提供了一种轮廓任意数据的方法,并且不需要没有缺失值的网格。

enter image description here

我仍然没有在Pascal中找到一个可接受的krieging算法,实际上fill-in the holes在网格中。