gpt4 book ai didi

Java 2D 加权数据插值

转载 作者:太空狗 更新时间:2023-10-29 22:47:36 24 4
gpt4 key购买 nike

我正在尝试找到一些 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 之间的值:红色

示例结果:

Shepard interpolation example

示例数据、规则和结果不兼容,只是随机示例来解释我的问题。


这是我的最终测试类:http://pastebin.com/nD6MT8eS

最佳答案

假设您有一个可以使用的 Point 类(例如 java.awt.Point),您可以将权重放入一个 Map 中:

Map<Point,Double> points = new HashMap<Point,Double>();
points.put( new Point(2,5), 30 )
...

然后,您制作一张图像,并为每个 x,y 坐标找到最佳分数。我假设分数是距离乘以表中点的权重的倒数。如果是这样,它是这样的:

image = createBitmap( width, height )
for( int x = 0; x < width; x++ )
for( int y = 0; y < height; y++ )
{
double maxScore = -Double.MAX_VALUE
for( Point p : points.keySet() )
{
double score = points.get(p)/p.distance( x, y ) //Inverse distance times point weight
minDist = Math.max( maxScore, score )
}
image.setPixelColour( x, y, getColorForDistance( 1/minDist * points.get(p) )
}

getColourForDistance( double dist ) 应该很明显,尽管您必须正确设置色阶。我假设 createBitmap( width, height ) 正在创建一个图像。您要制作哪种图像取决于您的应用程序,它是否具有 setPixelColour 方法或类似方法也是如此。积分等级的选择也取决于您的应用。

这不是优化的——它至少是 O(x*y*p),其中 p 是点数。如果 p 变大,您可能需要查看更合理的数据结构来存储点。

关于Java 2D 加权数据插值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14341369/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com