将数字从特定范围转换为不同范围内的数字

时间:2014-06-16 09:06:33

标签: c# math double range perlin-noise

编辑:解决了!我只是将结果乘以-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 个答案:

答案 0 :(得分:0)

我认为在使用这个公式之前你应该做的第一件事是使用翻译。为了从-1和1之间的值中删除所有负数值,您应首先将1添加到所有这些元素,然后应用最小 - 最大变换。我认为这将完成工作