資源簡介
c語言
三維線性插值
簡單明了,與matlab對比一致
。。。。。。。。。。。。
代碼片段和文件信息
#include?
//X的數量
int n_x=2;
//Y的數量
int n_y=2;
//Z的數量
int n_z=2;
//自變量左側下標
int Lindex;
//自變量右側下標
int Rindex;
//x的值
double m_x[2]={12};
//y的值
double m_y[2]={12};
//Z的值
double m_z[2]={12};
//V的值
double m_data[8]={?2?6?4?8?3?7?5?9?};
//插值函數,xyz待插點,輸出V
double interp3(double?xdouble?ydouble?z);
//獲取V的值,根據3維下標
double?getV(int?xiint?yiint?zi);
//獲取待插點變量所處的左右鄰近位置下標
void?getRangeIndex(double?valdouble?data[]int?n);
//獲取在范圍內所處位置的權重
double getWeight(double?val1double?val2double?val);
//將兩個三維點,轉成1個二維點,輸入為兩個三維點下標和降維的權重
double?get4Q(int?xi1int?yi1int?zi1int?xi2int?yi2int?zi2double?weight);
int?main()
{
double?x=1;
double?y=2;
double?z=2;
double?v=interp3(xyz);
printf(“IN?x:%f y:%f z:%fthe?V?is?%f\r\n“xyzv);
return?0;
}
double?interp3(double?xdouble?ydouble?z)
{
int?x_f_index[2];
int?y_f_index[2];
int?z_f_index[2];
double?xdydzd;
double?i1i2j1j2;
double?w1w2;
getRangeIndex(xm_xn_x);
x_f_index[0]=Lindex;
x_f_index[1]=Rindex;
getRangeIndex(ym_yn_y);
y_f_index[0]=Lindex;
y_f_index[1]=Rindex;
getRangeIndex(zm_zn_z);
z_f_index[0]=Lindex;
z_f_index[1]=Rindex;
xd=getWeight(m_x[x_f_index[0]]m_x[x_f_index[1]]x
評論
共有 條評論