好主人,我终于明白了.这是最终结果:
美丽!但它做了很多工作.
我的代码太粗糙,而且对我的项目来说太具体了,对其他任何人都没用.但这是潜在的逻辑.
您必须有两组数据才能进行插值.我将这些称为“外部”曲线和“内部”曲线.假设“外部”曲线完全包围“内部”曲线,而不与“内部”曲线相交.曲线实际上只是X,Y数据的集合,并且对应于定义为Z的一组值.在此处使用的示例中,“外部”曲线对应于Z = 50并且“内部”曲线对应于Z = 100 .
重申的目的是为任何给定的Y找到X,其中Z是我们已知数据点之间的某个数字.
>首先计算未知Z代表的两个曲线集之间的百分比.因此,如果在我们的示例中Z = 75,则结果为0.5.如果Z = 60,则为0.2.如果Z = 90那么那将是0.8.称这个比例为P.
>选择“外部”曲线上的数据点,其中Y =您想要的Y.想象一下该点与0,0之间的线段.将其定义为AB.
>我们想要找到AB与“内部”曲线相交的位置.为此,我们遍历内部曲线上的每个点.将所选点和点1之间的线段定义为CD.检查AB和CD是否相交.如果没有,继续迭代直到他们这样做.
>当我们找到一个AB-CD交叉点时,我们现在看看交叉点创建的线和我们在步骤2的“外部”曲线上的原始点.然后,这个线段是内部曲线和外部曲线之间的一条线.线的斜率,如果继续“向下”图表,将与0,0相交.将此新线段定义为EF.
>找到EF长度的P%(从步骤1开始)的位置.检查Y值.这是我们想要的Y值吗?如果是(不太可能),则返回该点的X.如果没有,看看Y是否小于目标Y.如果是,则将该点的位置存储在变量中,我将其复制为低Y.然后再次返回步骤2,以获得外曲线上的下一个点.如果它大于目标Y,请查看lowY是否有值.如果是,则在两个值之间进行插值并返回插值的X.(换句话说,我们将“装入”我们想要的坐标.)
上述程序运作良好.它在Y = 0的情况下失败,但是很容易做到这一点,因为你可以在这两个特定点上进行插值.在样本数量少得多的地方,它会产生一些锯齿状的结果,但我想这是预期的(这些是Z = 5000,6000,7000,8000,9000,10000,其中只有5000和10000是已知点它们每个只有20个数据点 – 其余的都是插值的:
我并不认为这是一个优化的解决方案,但是在我的计算机上几乎可以瞬间解决积分点数,所以我认为它对于现代机器来说并不太费力,至少我拥有的总点数(30-每曲线50).
谢谢大家的帮助;通过一点点谈论这个问题有很多帮助,并且意识到我在这里真正想要的不是任何简单的线性插值,而是沿曲线的一种“径向”插值.