我正在编写一个 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/