|
回复 2 # winter_spring 的帖子
我认为这个问题应该包含两个过程吧,
第一个过程是根据输入的点(X,Y)找到包围它的四个点,又可以分为两个步骤:
1-1 根据输入的X坐标找到这样的X_data和X_data[i+1],他们满足:
X_data<X<X_data[i+1]
1-2 根据输入的Y坐标找到这样的Y_data[j]和Y_data[j+1],他们满足:
Y_data[j]<Y<Y_data[j+1]
X_data[]和Y_data[]数组储存着存在精确值的那些点的坐标。
V_data[][]数组储存着存在精确值的那些点的函数值。
第二个步骤是根据X_data,X_data[i+1],Y_data[j],Y_data[j+1]以及V_data[i,j],V_data[i,j+1],V_data[i+1,j],V_data[i+1,j+1]构造双线性插值函数:
v = a*x + b*y +c*x*y +d
具体来说就是求解这样的方程组(a,b,c,d是未知数):
V_data[i,j]= a*X_data + b*Y_data[j] + c*X_data*Y_data[j] +d
V_data[i,j+1]= a*X_data + b*Y_data[j+1] + c*X_data*Y_data[j+1] +d
V_data[i+1,j]= a*X_data[i+1] + b*Y_data[j] + c*X_data[i+1]*Y_data[j] +d
V_data[i+1,j+1]= a*X_data[i+1] + b*Y_data[j+1] + c*X_data[i+1]*Y_data[j+1] +d
求解得到a,b,c,d后,就可以将实际坐标值带入,得到插值结果:
v = a*X + b*Y +c*X*Y +d
大概就是这样的吧,整个过程并不需要涉及很艰深的C语言内容,相信楼主能够完成编码。
|
评分
-
1
查看全部评分
-
|