function GetFromTable (var ElementCounts,var IndexValue,var TableIndexArray[],var TableValueArray[])
{
/*
本函数可以完成一个一维查表的操作:
ElementCounts:所引用表的节点数量,不能小于1
IndexValue:索引值,该函数将在表中查找索引值为该值处所对应的表值,如果该值不在节点上,则进行线性插值处理
TableIndexArray: 查表索引,要求该索引值是单调递增的
TableValueArray: 查表值,列出对应索引处的值,并不要求单调性
*/
int rowPointCount,i;
double WorkPoint;
double tempFun;
rowPointCount=ElementCounts;
WorkPoint=IndexValue;
//查找工作点区间
if (WorkPoint<=TableIndexArray[0])//工作点在下界下方
{
return TableValueArray[0];
}
if (WorkPoint>=TableIndexArray[rowPointCount-1])//工作点在上界上方
{
return TableValueArray[rowPointCount-1];
}
for (i=0;i<rowPointCount-1;++i)//检测是否落在index后的一个区域内
{
if (WorkPoint==TableIndexArray[i])//如果工作点在区间分界点上
{
return TableValueArray[i];
}
if (WorkPoint>TableIndexArray[i])//如果工作点大于区域下界
{
if (WorkPoint<TableIndexArray[i+1])//并且工作点小于区域上界
{
tempFun=TableValueArray[i]+(TableValueArray[i+1]-TableValueArray[i])*(WorkPoint-TableIndexArray[i])/(TableIndexArray[i+1]-TableIndexArray[i]);
return tempFun;
}
}
}
}
下面是函数使用的一个demo:
int sizeOfTable=5;
double
indexTable[5]={0 ,1 ,2 ,3 ,4},
valueTable[5]={1.5,2.2,3.7,4.6,5.1};
double idxV=2.5;
double tableV;
tableV = GetFromTable(sizeOfTable,idxV,indexTable,valueTable);