Java 多点间插值

Java 多点间插值,java,math,interpolation,point,Java,Math,Interpolation,Point,我需要一些算法的想法。我有一个大的数据集~100k个二维点作为对象的条目,第三个变量作为平面这一点的值。现在我想计算在给定坐标下的插值点 到目前为止,我唯一的想法是对整个数据集进行迭代,收集与我要计算的点最近的4个点的列表,然后在它们之间进行插值 在这种情况下,如何在多个数据之间按点的距离进行加权插值?那么离十字架越近的点在结果中越明显 在这种情况下,对于如何获得给定坐标下的插值,您还有其他想法吗?它应该是相对准确的,但不必是100%,也不应该花时间来计算,因为这必须做大约10000次,我不希望

我需要一些算法的想法。我有一个大的数据集~100k个二维点作为对象的条目,第三个变量作为平面这一点的值。现在我想计算在给定坐标下的插值点

到目前为止,我唯一的想法是对整个数据集进行迭代,收集与我要计算的点最近的4个点的列表,然后在它们之间进行插值

在这种情况下,如何在多个数据之间按点的距离进行加权插值?那么离十字架越近的点在结果中越明显

在这种情况下,对于如何获得给定坐标下的插值,您还有其他想法吗?它应该是相对准确的,但不必是100%,也不应该花时间来计算,因为这必须做大约10000次,我不希望用户等待太久

关于数据:这些点几乎在一个网格中,二维点的值实际上是高度值,因此两个近点的值也几乎相等


数据存储在HashMap中,其中Vector2f是由2个浮点组成的简单类。没有排序。

这是一个不明显的问题。拿3分要容易得多,拿4分你会陷入模棱两可的境地。想象一下,在方形ul和br角中,样品周围的点的值为1,其他角的值为5。它可以解释为高度为1的山谷穿过中心,高度为5的山脊穿过中心,或者是某种奇特的样条马鞍形。若你们把网格的不规则性考虑进去,最近的4个点在样品的同一侧会变得更加有趣,所以你们不能只选择4个最近的点,你们需要找到4个边界点

对于3点情况,请检查

对于规则网格上的4点情况,可以使用生成某种“公平”插值

对于不规则网格上的4个点,您可以查看如下解决方案
但是要小心找到我提到的合适的边界点,找到最近的边界点是行不通的,这不是一个明显的问题。拿3分要容易得多,拿4分你会陷入模棱两可的境地。想象一下,在方形ul和br角中,样品周围的点的值为1,其他角的值为5。它可以解释为高度为1的山谷穿过中心,高度为5的山脊穿过中心,或者是某种奇特的样条马鞍形。若你们把网格的不规则性考虑进去,最近的4个点在样品的同一侧会变得更加有趣,所以你们不能只选择4个最近的点,你们需要找到4个边界点

对于3点情况,请检查

对于规则网格上的4点情况,可以使用生成某种“公平”插值

对于不规则网格上的4个点,您可以查看如下解决方案 但是要小心找到我提到的合适的边界点,找到最近的边界点是行不通的。有一些通用算法,如果您对数据有限制,您可以使用它们来简化算法。因为这些点几乎在一个网格中,我做了一个近似值,它们应该是相对精确的,但不必是100%,也不需要花费时间来计算

给定

2浮动x,y作为要插值的点。 4个Vector2f类型的对象,命名为v1到v4,假设每个对象的坐标都可以访问为v1.x和v1.y,并且它们大致位于网格上: v1.x==v3.x,v2.x==v4.x,v1.y==v2.y,v3.y==v4.y 每个向量2f的值被检索为float h1=map.getv1 h代表高度,那么您可以这样写: 作为补充说明,您可能还希望研究如何使您的类变得严格。有一些通用算法,如果您对数据有限制,您可以使用它们来简化算法。因为这些点几乎在一个网格中,我做了一个近似值,它们应该是相对精确的,但不必是100%,也不需要花费时间来计算

给定

2浮动x,y作为要插值的点。 4个Vector2f类型的对象,命名为v1到v4,假设每个对象的坐标都可以访问为v1.x和v1.y,并且它们大致位于网格上: v1.x==v3.x,v2.x==v4.x,v1.y==v2.y,v3.y==v4.y 每个向量2f的值被检索为float h1=map.getv1 h代表高度,那么您可以这样写:
作为旁注,您可能还想研究如何使您的类严格化。

如果要计算点,如何获得与我要计算的点最近的4个点的列表?是否对计算点进行初始猜测,然后迭代移动?输出完全取决于使用的方法。这些点类似于双参数函数吗?是th吗
函数有点单调?价值观是如何传播的?这些完全是随机的吗?哦,看起来我还不够清楚。我知道坐标。但是所有的点都有第三个值,我想通过在已知点的其他点的值之间插值来计算第三个值coordinates@CptBartender这些点几乎在一个网格中,从输入文件中读取,因此它们后面没有函数是的,但是这些值背后必须有某种意义……如果你要计算这个点,你如何得到离我要计算的点最近的4个点的列表?是否对计算点进行初始猜测,然后迭代移动?输出完全取决于使用的方法。这些点类似于双参数函数吗?函数有点单调吗?价值观是如何传播的?这些完全是随机的吗?哦,看起来我还不够清楚。我知道坐标。但是所有的点都有第三个值,我想通过在已知点的其他点的值之间插值来计算第三个值coordinates@CptBartender这些点几乎在一个网格中,从一个输入文件中读取,因此它们后面没有函数是的,但是这些值背后必须有某种意义…谢谢,这些wiki链接看起来非常有用。我想我会尝试用3点插值。你知道当点X不在三个最近点的三角形内时,这是否也起作用?在示例ImageThank中似乎也是如此,这些wiki链接看起来非常有用。我想我会尝试用3点插值。你知道当点X不在三个最近点的三角形内时,这是否也起作用?在示例图像中似乎也是如此
float n1 = h1 * (v2.x - x) * (v2.y - y);
float n2 = h2 * (x - v1.x) * (v2.y - y);
float n3 = h3 * (v2.x - x) * (y - v1.y);
float n4 = h4 * (x - v1.x) * (y - v1.y);
float den = (v2.x - v1.x) * (v2.y - v1.y);
float height = (n1 + n2 + n3 + n4) / den;