c# - 随机排列坐标值的3D插值

标签 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 插值算法都假定坐标必须以某种矩形形状排列,这在我的方案中是不可能的。

是否有适合我需要的算法?指出我们在同一个项目中使用了一些 R.NET 功能可能会有所帮助,因此使用 R 的解决方案会非常好。

最佳答案

有不同的插值方法,它们给您的结果略有不同。您应该尝试几个,看看哪种最适合您的场景。

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

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

如果因为分布不均不想使用半径,可以取最近的 K 个点(用 K 进行试验,看看哪个最有效)。

这些都是非常通用的,但在很多情况下它们工作得相对较好。

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

关于c# - 随机排列坐标值的3D插值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37022036/

相关文章:

xml - 将 XML 解析为 R 中的 data.frame

r - 在 R 中的列上使用子字符串

algorithm - 扩展字符串匹配算法以搜索实数模式

python - 为什么我的代码无法通过LeetCode 322 Coin Change 的测试用例?

algorithm - 括号组合的时间复杂度

c# - 如何在单元测试中验证EF Core DBContext配置

c# - 使用 HttpClient 将 CURL 转换为 C#

c# - 加入在 LINQ 语句中不起作用

c# - MSTest 自定义测试通过消息

sql - 如何解决错误 "no applicable method for ' show_query'应用于类 "data.frame"的对象“