Почему я получаю NaN от Mathf.Acos? - PullRequest
0 голосов
/ 16 мая 2018

Я кодирую физику в C # и движок Unity Game. Я иногда получаю значение NaN от этой функции Acos, и я полностью в тупике. Как вы можете видеть на скриншоте отладки, я проверил значения, и они отлично работают, но при использовании переменной возвращает NaN. Пожалуйста, помогите!

float a = Vector3.Dot(waterlineVec.normalized, transform.InverseTransformDirection(velocityVector.normalized));
a = Mathf.Clamp(-1, a, 1);
alpha = Mathf.Acos(a); //alpha in radians

enter image description here

1 Ответ

0 голосов
/ 28 ноября 2018

У меня тоже была эта проблема, с почти идентичным кодом.В моем случае я использовал Mathf.Clamp01(a), что эквивалентно Mathf.Clamp(a, 0, 1).Я действительно не могу объяснить, почему, но кажется, что это можно решить, заменив этот вызов функции на:

if(a > 1.0f)
    a = 1.0f;
if(a < 0.0f)
    a = 0.0f;

Я думал, что это может быть потому, что Mathf.Clamp01 переводит числа с плавающей точкой в ​​удвоенные значения перед выполнениемсравнение (как видно из декомпиляции библиотеки UnityEngine), но даже когда я делаю это сам в коде, это не воспроизводит эту проблему - так что я немного растерялся относительно причины - но это исправляет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...