gpt4 book ai didi

javascript - (Math.random()*x)+y 返回大于 x+y 的数

转载 作者:行者123 更新时间:2023-11-29 19:31:23 26 4
gpt4 key购买 nike

所以我一直在使用 HTML canvas 和 Javascript 来创建随机图像。大部分都运行得很顺利,但最近我遇到了问题。

我正在尝试添加一个用户界面,用户可以在其中为像素的红色、绿色和蓝色值创建上限和下限,以及更改像素的大小。颜色给我带来麻烦。

出于某种原因,以下功能:

function getRandomInt(min,max){
return Math.floor(Math.random() * (max - min + 1)) + min;
}

返回的值大于最大值。我还没有完全弄清楚原因。

有关更多信息,@max 和@min 来自<input type="number">代码如下的标签:

rmax = document.getElementById('rmax').value;

在另一个函数中。

然后,它们被存储在一个由数组组成的数组中(我知道这在内存方面很困惑,但数组的大小永远不应该太大,所以目前这不是问题。)

即:

var height = canv.getAttribute("height");
var width = canv.getAttribute("width");
var tall = Math.floor(height/blockh)+1;
var wide = Math.floor(width/blockw)+1;
var mat = new Array(wide);
for(var i = 0; i<wide; i++){
mat[i] = new Array(tall);
}
for(var i = 0; i<wide; i++){
for(var j = 0; j<tall; j++){
r = getRandomInt(rmin,rmax);
g = getRandomInt(gmin,gmax);
b = getRandomInt(bmin,bmax);
mat[i][j] = new Array(4);
mat[i][j][0] = r;
mat[i][j][1] = g;
mat[i][j][2] = b;
mat[i][j][3] = false;
}
}

最后,我运行了 mat并使用 Canvas 绘制每个像素:

for(var i = 0; i<wide; i++){
for(var j = 0; j<tall; j++){
drawBlock(ctx,mat[i][j][0],mat[i][j][1],mat[i][j][2],(i*blockw),(j*blockh));
mat[i][j][3] = true;
}
}
//more code
function drawBlock(canv,r,g,b,x,y) {
color = "rgba("+r+","+g+","+b+","+"1)";
canv.beginPath();
canv.fillStyle=color;
canv.moveTo(x,y);
canv.lineTo(x+blockw,y);
canv.lineTo(x+blockw,y+blockh);
canv.lineTo(x,y+blockh);
canv.lineTo(x,y);
canv.fill();
canv.closePath();
}

根据<input>的性质标签,所有的最小值和最大值都强制在 0 到 256 之间。

但是,当我运行代码时,它获得了正确的最小值和最大值,但它计算的颜色值远远超过了最大值。例如,rmin=0; rmax=256;我得到的 r 值在 8,000 左右。显然,这是一个问题,因为我只查找 0 到 256 之间的值。

注意:当我只是根据 .js 文件中的默认值进行绘图时,它工作正常。我只在从 <input> 检索值后遇到问题标记然后再次运行。

我认为问题出在 getRandomInt()函数,但有可能是在我从 <input> 中检索值时标签。然而,我对此表示怀疑,因为我已经完成了一些故障排除并且它检索到的值似乎是正确的。

有什么想法吗?

最佳答案

发生这种情况是因为您将字符串作为参数传递。

getRandomInt('0', '256') // 1540

接下来会发生什么 - Math.floor(Math.random() * (max - min + 1)) 表达式返回的数字是连接min string.

您必须使用 parseInt(rmax, 10)将其显式转换为整数

关于javascript - (Math.random()*x)+y 返回大于 x+y 的数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27281537/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com