Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 数学是可靠的吗?_Javascript_Random - Fatal编程技术网

Javascript 数学是可靠的吗?

Javascript 数学是可靠的吗?,javascript,random,Javascript,Random,我正在使用Math.random为我的项目生成速度,但我的函数似乎返回了有偏差的数字 这是我的随机函数。它生成一个从-1到1的值 x_velocity += ((Math.random() * 2) - 1); y_velocity += ((Math.random() * 2) - 1); 如图所示,速度不是随机的。它们应该分散在整个圆圈中,但它们朝左上方移动。此行为在刷新后继续 编辑:我发现了错误。稍后在程序中,我编辑粒子向上移动以进行调试,但忘记删除该部分。均匀圆内采样如何 let r

我正在使用Math.random为我的项目生成速度,但我的函数似乎返回了有偏差的数字

这是我的随机函数。它生成一个从-1到1的值

x_velocity += ((Math.random() * 2) - 1);
y_velocity += ((Math.random() * 2) - 1);

如图所示,速度不是随机的。它们应该分散在整个圆圈中,但它们朝左上方移动。此行为在刷新后继续


编辑:我发现了错误。稍后在程序中,我编辑粒子向上移动以进行调试,但忘记删除该部分。

均匀圆内采样如何

let r = Math.sqrt(Math.random());
let phi = 2.0*Math.PI*Math.random();
let x_velocity = r*Math.cos(phi);
let y_velocity = r*Math.sin(phi);

分散在整个圆中并不意味着随机。您的值出现在具有方形边框的区域中。如何将它们映射到一个圆?我怀疑你的映射算法有缺陷。此外,您正在
+=
计算速度;它们的基本值是什么?它们的基本值是零。Math.random生成一个介于-1和1之间的值,并将其添加到x和y速度中。然后将x和y速度添加到点的x和y坐标。@BrianNguyen这些值是什么时候添加的?在
requestAnimationFrame
中重复?只有一次?@BrianNguyen那么我不能在Chrome或Firefox上重现这种行为。请回答您的问题,并提供一个演示该问题的示例。它不需要包含所有花哨的颜色,只需要最小值就可以理解为什么速度会这样。到目前为止的提示和答案有帮助吗?@user4642212观点正确,答案已编辑