【发布时间】:2013-02-06 23:26:01
【问题描述】:
我正在尝试查找一些 Java 库、代码示例(或起点)来帮助我弄清楚如何插入具有权重的 2d 点列表以生成插值水平曲线。
谷歌搜索我发现有several algorithms available 可以做到这一点,我发现一些explanations 有有趣的内容。我想尝试的第一个算法是反距离加权插值。
但是有了所有这些信息,我有一些基本的疑问:
要生成如下图所示的一张图片,我必须做一个像素矩阵(带权重),插入数据,将像素组合在一起(按颜色范围),然后加入点绘制曲线并放置像this这样的参考文本值?
如果我需要做这个像素矩阵,对于一个巨大的插值来说会非常昂贵,所以我可以做更少的点并使用样条连接然后创建颜色级别吗?
示例数据:
+-------------------+
| X | Y | WEIGHT|
+-------------------+
| 2 | 5 | 30 |
| 7 | 3 | 25 |
| 1 | 1 | 10 |
| 5 | 6 | 45 |
| 7 | 9 | 15 |
+-------------------+
示例规则:
- 00-10 之间的值:蓝色
- 10-20 之间的值:绿色
- 20-30 之间的值:黄色
- 30-40 之间的值:红色
示例结果:
示例数据、规则和结果不兼容,只是随机示例来解释我的问题。
这是我最后的测试课:http://pastebin.com/nD6MT8eS
【问题讨论】:
-
你考虑过linear regression吗?它还使您能够通过将问题的维度增加到
(x,y,xy,x^2,y^2,...,x^(k-1)y,y^(k-1)x,x^k,y^k)来获得度数为k的多项式。 Weka 获得了 LinearRegression 功能。你会觉得它有用吗?或者您正在严格寻找反距离加权? (注意:线性回归试图最小化从预测到给定数据的平方误差) -
@amit,我需要使用 inverse distance weighted 和 Kriging 来做,因为这两种方法是业界最常用的,最终会用到软件。因此,起始点将是加权的反距离。
-
您可以使用 JHeatChart 进行绘图。您可能需要获取源代码,以便尝试不同的插值。 javaheatmap.com
-
JHeatChart 不进行散点插值,它适用于输入数据的二维网格。
-
下面我的回答有什么遗漏吗?它告诉你如何计算上面的图像。如果这不是你想要的,你能把问题说得更清楚吗?如果您想要一张与您发布的图像类似的图像,则无法避免在某些时候创建像素数组。如果您将颜色分割成条带,它将隐含轮廓。如果你想获得代表等高线的函数,那是另一个问题。此外,你暗示你想要一个算法。如果您希望有一个图书馆为您做这件事,您应该明确说明
标签: java algorithm interpolation