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