将某个范围内的数字转换为另一个范围内的数字

本文关键字:数字 范围内 另一个 转换 | 更新日期: 2023-09-27 18:08:58

编辑:解决!我只是把结果乘以-1,这就解决了问题

我正在尝试将范围从-1.0到1的双精度转换为范围从0到255的整数。但当我尝试这样做时,它返回负值。我试过使用那些在这里问过同样问题的人的代码,但我似乎不能让它像它应该的那样工作。

生成双精度对象的代码:

 temp = perlinMap.GetValue((double)(x / this.samples), (double)(y / this.samples), 1d);
 if (temp <= 0.1d && temp >= -1.0d)
 {
    colorArray[(int)x, (int)y] = toGradient(temp, -1.0d, 0.1d, 0.0d, 0.0d, 104d, 153d, 173d, 255d);
 }

方法:

 Color toGradient(double value, double minValue, double maxValue, double rMin, double rMax, double gMin, double gMax, double bMin, double bMax)
 {
    r = (((value - minValue) * (rMax - rMin)) / (maxValue - minValue)) + rMin;
    g = (((value - minValue) * (gMax - rMin)) / (maxValue - minValue)) + gMin;
    b = (((value - minValue) * (bMax - rMin)) / (maxValue - minValue)) + bMin;
    color = Color.FromArgb(255, (int)r, (int)g, (int)b);
        return color;
 }

相同的方法,不同的方法。返回相同的负数

 Color toGradient(double value, double minValue, double maxValue, double rMin, double rMax, double gMin, double gMax, double bMin, double bMax)
 {
    r = (double)(rMin + ((value - minValue) * (rMax - bMin) / (maxValue - minValue)));
    g = (double)(gMin + ((value - minValue) * (gMax - bMin) / (maxValue - minValue)));
    b = (double)(bMin + ((value - minValue) * (bMax - bMin) / (maxValue - minValue)));
    color = Color.FromArgb(255, (int)r, (int)g, (int)b);
    return color;
  }

将某个范围内的数字转换为另一个范围内的数字

我认为在使用这个公式之前应该做的第一件事是使用翻译。为了从-1和1之间的值中删除所有负值,您应该首先对所有这些元素加1,然后应用最小-最大转换。我想这样就能完成任务了