在嵌入式C中最接近给定值的多维数组中查找值

时间:2014-09-06 14:02:54

标签: c arrays embedded

我正在开发一种带有微控制器和使用C编程语言的颜色传感器的嵌入式色彩感应应用程序。

目前,我有一个校准值的数组看起来像这样 (每行都是针对不同事物的校准)

unsigned long calibrationValues[6][6]

value1 value2 value3 value4 value5 value6    
value1 value2 value3 value4 value5 value6
value1 value2 value3 value4 value5 value6
value1 value2 value3 value4 value5 value6
value1 value2 value3 value4 value5 value6
value1 value2 value3 value4 value5 value6

和另一个数组

unsigned long scannedValue[6]

,其中包含六个已扫描的值,以便根据校准值进行分析

我知道如何检查数组中是否存在该值,但这对我想要做的事情来说太具体了,因为扫描用于分析的值可能与精确校准值略有不同

所以,我的问题是:如何在calibrationValues行中找到最接近到扫描值值的结果索引?

实施例

(以下使用的值仅作为示例)

calibrationValues[6][6]

0 - 100 250 325 650 700 830
1 - 5   12  15  35  50  90
2 - ...
...

scannedValue[6]
0 - 350
1 - 80
2 - ...
...

scanningValue [0]最接近calibrationValues [0] [2]
scanningValue [1]最接近calibrationValues [1] [5]
...

我已经查看了其他问题,特别是this问题,但不确定如何适应多维数组

1 个答案:

答案 0 :(得分:2)

假设这听起来很直接:

int i, j;
int results[6];
int minDiff, diff;

for (i = 0; i < 6; ++i)
{
    results[i] = 0; 
    minDiff = abs(scannedValue[i] - calibrationValues[i][0]);

    for (j = 1; j < 6; ++j)
    {
        diff = abs(scannedValue[i] - calibrationValues[i][j]);
        if (diff < minDiff)
        {
            minDiff = diff;
            results[i] = j;
        }
    }
}

results[]数组将包含从0到5的最接近的索引。