Я пытаюсь интерполировать 2D-угол и работает 99,9% времени. По некоторым причинам я получаю -nan (IND) для некоторых значений, например:Slerp интерполяция результатов угла в -nan (ind)
lastAngle = -0.0613451
currentAngle = -0.061421
alpha = 0.218813
Это код:
inline float slerpRotation(const float& angle1, const float& angle2, const float& alpha)
{
auto v1 = b2Vec2{std::cos(angle1), std::sin(angle1)};
auto v2 = b2Vec2{std::cos(angle2), std::sin(angle2)};
auto v = this->slerp(v1, v2, alpha);
return std::atan2(v.y, v.x);
}
inline b2Vec2 slerp(const b2Vec2& v1, const b2Vec2& v2, const float& alpha)
{
auto cosAngle = v1.x * v2.x + v1.y * v2.y;
auto angle = std::acos(cosAngle);
auto angleAlpha = angle * alpha;
auto v3 = (v2 - (cosAngle * v1)).Normalize();
auto x = v1.x * std::cos(angleAlpha) + v3 * std::sin(angleAlpha);
auto y = v1.y * std::cos(angleAlpha) + v3 * std::sin(angleAlpha);
return b2Vec2{x, y};
}
Все эти примеры приводит инф NUM:
slerpRotation(-0.0613451f, -0.061421f, 0.218813f);
slerpRotation(-1.63139f, -1.63139f, 0.723703f);
slerpRotation(-0.0614404f, -0.0614034f, 0.199831f);
slerpRotation(0.0194162f, 0.0194164f, 0.259074f);
Я пытался решить эту проблему какое-то время, не зная, что вызывает эту проблему, вы, ребята, знаете, как это решить?
Что делает 'b2Vec2 :: Normalize' с вектором {0,0}? – 1201ProgramAlarm
@ 1201ProgramAlarm возвращает 0 – Saruman
Хех, эта строка кажется проблемой: auto angle = std :: acos (cosAngle); Получение значения nan обратно – Saruman