标准化有符号值会导致值超出0和1

时间:2018-07-09 11:09:49

标签: c#

我正在尝试创建某种热图,以可视化从传感器获取的数据。到目前为止,此方法有效,但看起来很奇怪。因此,我发现规范化值(范围从-100到100)的代码必须无效。

我经常会遇到异常,因为我用于计算颜色(字节)的因子(归一化值)为负或大于1。

因此,我修改了代码,并基本上将最小值,最大值和值移动了Math.Abs(min),以确保我的值是正数。负面的问题已解决,但有时我会遇到诸如 1.02xxxx 之类的值,但这种情况一定不会发生。 编辑:在某些情况下仍然会出现负值...

到目前为止,这是我的代码:

double min = data.Min();
double max = data.Max();
double avg = data.Average();
double v = max - min;

byte a, b, g, r;

// Set minimum and maximum
Dispatcher.InvokeAsync(() =>
{
    Minimum = min;
    Maximum = max;
    Average = avg;
});

double shift = 0;
if (min < 0) // If minimum is negative, shift it to 0 and everything else positively by Abs(min)
{
    max += shift = Math.Abs(min);
    min += shift;
}

int skipFactor = (int)(1 / _pointResolution);
for (int i = 0; i < data.Length; i += skipFactor)
{
    // If min == 0 then shift data
    double value = Math.Abs(min) < 0.0001d ? (data[i] + shift) / max : (data[i] - min) / v;
...
}

如何在不添加四舍五入或“边缘情况”的情况下解决此问题?我假设Math.Abs()与添加操作相结合会导致值略有偏差。但是必须对此有解决方案,对吧?

0 个答案:

没有答案