javascript - 我的网络 worker 似乎没有正确计算

标签 javascript random geometry computer-science calculus

我正在编写一个 JavaScript 应用程序来在球体表面生成随机点。我在 Wolfram 上找到了这个公式来获得 phi 和 theta ( http://mathworld.wolfram.com/SpherePointPicking.html#eqn2 )。 Phi 是我在使用 phi = cos^(-1)(2v-1) 时遇到的问题,其中 v 是 (0,1) 的随机变量。以下是我编写的用于计算 phi 的 JavaScript。但是,当它执行时,它经常返回 NaN。谁能告诉我我是否误解了公式?我唯一能想到的是 Math.random() 生成 (0,1] 并且 0 会引发错误。但是在运行多个测试时,我不认为 Math.random()每次执行该行时都会生成 0。

var phi = Math.acos(2 * (Math.random()) * - 1);

最佳答案

因为大于1的数的反余弦(Math.acos()函数)返回NaN,而Math.random() * 2 有时 返回大于 1 的数字。

如何修复?

我看到数学 cos^(-1)(2v-1)

好像是

v = someValue;

Math.acos(2 * v) - 1;

做你想做的,你可能想要

phi = Math.acos(2 * Math.random() - 1);

作为您的 Javascript 代码。

结论:

要修复,您需要做的就是更换

phi = Math.acos(2 * Math.random() * - 1);

phi = Math.acos(2 * Math.random() - 1);

(删除 * -1)

关于javascript - 我的网络 worker 似乎没有正确计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20792534/

相关文章:

javascript - 如何为 Button.click Javascript 调用添加延迟

javascript - 随机数 JavaScript

matlab - 如何在 MATLAB 中实现鱼眼镜头效果(桶形变换)?

algorithm - 针对凸多面体形状类型转换胶囊

javascript - 在 Rails 中提交表单,无需重新加载页面

调用事件后,javascript 构造函数属性变为未定义

javascript - 你能比 O(log n) 更快地得到 10 的幂吗?

c# - "an object reference is required for the non-static field, method, or property ' Random.Next(int, int)' 是什么意思?

R:如何从矩阵的每一行添加具有随机选择的值的列?

algorithm - 检测 180 度旋转时出现问题