Мои веб-работники, похоже, не правильно рассчитывают
Я пишу приложение JavaScript для генерации случайных точек на поверхности сферы. Я нашел эту формулу на Вольфраме, чтобы получить фи и тета ( http://mathworld.wolfram.com/SpherePointPicking.html). У меня проблемы с Phi phi = cos^(-1)(2v-1)
где v - случайные величины (0,1). Ниже приведен код JavaScript, который я написал для вычисления фи. Однако, когда он выполняется, он очень часто возвращает NaN. Может кто-нибудь сказать мне, если я неправильно понимаю формулу? Единственное, о чем я могу думать, это то, что Math.random() генерирует (0,1) и 0 может выдать ошибку. Но при запуске нескольких тестов я не думаю, что Math.random()
генерирует 0 каждый раз, когда я выполняю строку.
var phi = Math.acos(2 * (Math.random()) * - 1);
2 ответа
Это потому, что арккосинус числа больше 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)
У вас есть дополнительное умножение.
var phi = Math.acos(2 * (Math.random()) * - 1);
должно быть
var phi = Math.acos(2 * Math.random() - 1);