我的Webworkers似乎没有正确计算

时间:2013-12-26 23:18:42

标签: 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);

2 个答案:

答案 0 :(得分:3)

这是因为数字大于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)

答案 1 :(得分:0)

你有一个额外的乘法。

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

应该是

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