3D随机排列坐标值的插值

时间:2016-05-04 08:12:12

标签: c# r algorithm interpolation

在.NET / C#项目中,我有相对随机排列的坐标,并为每一个分配了权重KPI,如下所示:

Weight   | Lat       | Long
---------+-----------+-----------
1,123444 | 54,219367 | 9,696117
1,067940 | 51,950265 | 11,692274
1,054050 | 52,131392 | 13,216249
1,044820 | 52,636704 | 9,845077
1,023757 | 50,118346 | 7,308953
1,006427 | 53,612651 | 12,429595
1,002610 | 51,433237 | 7,661594
0,988619 | 49,396423 | 7,022961
0,955858 | 51,010989 | 10,845346
0,943669 | 50,652052 | 9,162438
0,938015 | 51,104541 | 13,201738
0,863415 | 48,790447 | 11,497889
0,835913 | 48,661604 | 9,350134

在数学或统计方面,我不是专家。我需要做的是根据先前计算的地理坐标权重进行插值(见上文)。

我发现的所有3D插值算法都假设坐标必须以矩形形状排列,这在我的szenario中是不可能的。

是否有适合我需要的算法?可能有助于指出,我们在同一个项目中使用了一些R.NET功能,因此使用R的解决方案将完全没问题。

1 个答案:

答案 0 :(得分:1)

有不同的插值方法,它们会给你略有不同的结果。您应该尝试一下,看看什么最适合您的场景。

一种方法是在特定半径上获取所有数据点。计算每个距离,然后使用距离作为权重计算其高度的加权平均值。这将允许您在点之间线性插值。

如果你想要更波浪的东西,你可以做同样的事情但不使用距离作为重量,你使用距离^ 2或距离^ 3。这将使最近点的重量更大,并使表面更加弯曲。您甚至可以将它们组合成a*distance^2 + b*distance之类的东西,但我会尽可能简单。

如果您因为分布不均而不想使用半径,则可以采用最接近的K点(使用K进行实验并查看最佳效果)。

这些都非常通用,但在很多情况下它们的效果相对较好。

注意:如果点相对接近,您可以计算3D空间中的距离,但如果它们距离较远,则应计算球体上的距离(弧的长度)。