如何用JavaScript以非随机的方式在一个范围内生成数字

How to generate numbers within a range in a non random way with JavaScript?

本文关键字:一个 范围内 数字 JavaScript 何用 非随机 方式      更新时间:2023-09-26

我知道如何在两个数字之间生成一个随机数。但我想实现的是用一种不完全随机的方式在两个数字之间生成一个数字。让我解释一下……

我有一个函数,它根据传入的数字生成颜色。如果该数字在0到600之间,我希望它将0到120之间的数字传递给hsl值的色调。如果数字大于600,我希望将120到240之间的数字传递给hsl值的色调。我的函数看起来像这样:

getColor:function (number {
  var hue;
  var color;
  if (number <= 600) {
    hue = [A number between 0 and 120];
  } else if (number >= 600) {
    hue = [A number between 120 and 240];
  }
  color = 'hsl(' + hue + ', 100%, 80%)'
  return color;
 }

因此,传递给函数的数字越大,例如,在0到600之间,在0到120之间的色相值就越高。明白了吗?

Thx u——Gaweyne

简单数学:

hue = Math.floor(number * 120 / 600);

或两点:

function transpose(smin, smax, dmin, dmax) {
    var slen = smax - smin;
    var dlen = dmax - dmin;
    var ratio = dlen / slen;
    return function(num) {
      return num * ratio + smin;
    }
}
transpose(0, 600, 0, 120)(300); // 60

首先你应该知道number的最大值和最小值。在我的例子中,number的最大值是1200,最小值是0,所以范围在0到1200之间。hue的取值范围为0 ~ 240。

传入函数的number越高,hue值越高。

0 hue = 0 number;

120 hue = 600 number;

240 hue = 1200 number;

1 hue = (600/120) number = (1200/240) number

=> 1 hue = 5 number

在我的例子中,(number在0和1200之间,600是中间)hue中的1值等于number中的5值。所以:

hue = number / 5;

如果你想要色调是一个整数,只需使用Math:

hue = Math.floor(number / 5);

在我的例子中,hue每增加5到number,它将增长1,无论number小于或大于600,因为600两侧的number的范围是相同的(600在范围的中间)。如果这不是您想要的,并且600不在范围的中间,则必须执行上述两次相同的计算。

var max = [maximum value of number];
var min = [minimum value of number];
getColor:function (number {
   var hue;
   var color;
   if (number <= 600) {
      hue = Math.floor( number / ((600 - min) / 120) );
   } else if (number >= 600) {
      hue = Math.floor( number / ((max - 600) / 120) ) + 120;
   }
   color = 'hsl(' + hue + ', 100%, 80%)';
   return color;
}