function GetFromTable_xy2v (var rowCounts,
var columnCounts,
var Value_row,
var Value_column,
var TableIndexArray_row[],
var TableIndexArray_column[],
var TableValueArray[])
{
/*
本函数可以完成一个二维查表的操作:
本函数将引用 GetFromTable作为基础函数,在更高一个维度上嵌套一层新的查表操作
*/
int idxSts;//0: not find, 1: Value_column_idx is found, 2:Value_column_lower_idx/Value_column_upper_idx are found
unsigned long Value_column_idx,Value_column_lower_idx,Value_column_upper_idx;
unsigned long idx;
idxSts=0;
for (idx=0;idx<columnCounts-1;++idx)
{
if (Value_column==TableIndexArray_column[idx])
{
Value_column_idx=idx;
idxSts=1;
break;
}
else
{
if ((Value_column-TableIndexArray_column[idx])*(Value_column-TableIndexArray_column[idx+1])<0)
{
Value_column_lower_idx=idx;
Value_column_upper_idx=idx+1;
idxSts=2;
break;
}
}
}
if (idxSts==0)
{
if (Value_column==TableIndexArray_column[columnCounts-1])
{
Value_column_idx=columnCounts-1;
idxSts=1;
}
else
{
if (TableIndexArray_column[0]<TableIndexArray_column[columnCounts-1])
{
if (Value_column<TableIndexArray_column[0])
{
Value_column_idx=0;
idxSts=1;
}
else
{
Value_column_idx=columnCounts-1;
idxSts=1;
}
}
else
{
if (Value_column<TableIndexArray_column[columnCounts-1])
{
Value_column_idx=columnCounts-1;
idxSts=1;
}
else
{
Value_column_idx=0;
idxSts=1;
}
}
}
}
double tmpAry[50];
double tmpIdx[2],tmpValues[2];
if (idxSts==1)
{
for (idx=0;idx<rowCounts;++idx)
{
tmpAry[idx]=TableValueArray[Value_column_idx][idx];
}
return GetFromTable(rowCounts,Value_row,TableIndexArray_row,tmpAry);
}
else if (idxSts==2)
{
for (idx=0;idx<rowCounts;++idx)
{
tmpAry[idx]=TableValueArray[Value_column_lower_idx][idx];
}
tmpValues[0]=GetFromTable(rowCounts,Value_row,TableIndexArray_row,tmpAry);
for (idx=0;idx<rowCounts;++idx)
{
tmpAry[idx]=TableValueArray[Value_column_upper_idx][idx];
}
tmpValues[1]=GetFromTable(rowCounts,Value_row,TableIndexArray_row,tmpAry);
tmpIdx[0]=TableIndexArray_column[Value_column_lower_idx];
tmpIdx[1]=TableIndexArray_column[Value_column_upper_idx];
return GetFromTable(2,Value_column,tmpIdx,tmpValues);//参考 CASL 一维查表函数
}
else
{
return 0;
}
}
以下是一个函数使用的demo:
double tableV;
double rowIdxTable[5]={1,3,5,6,7},
colIdxTable[3]={0,2,4},
ValuesTable[3][5]={
{0,1,2,3,4},
{2,3,4,5,6},
{4,5,6,7,8}};
double rowIdxV = 4,
colIdxV = 3;
tableV = GetFromTable_xy2v(5,3,rowIdxV,colIdxV,rowIdxTable,colIdxTable,ValuesTable);