From 4acd61cf3028a259d1b9a18eb30b2babfc356094 Mon Sep 17 00:00:00 2001 From: Lynix Date: Tue, 5 Aug 2014 17:38:49 +0200 Subject: [PATCH] Fixed Vector[2|3]::Normalize returning NaN for zero vectors Former-commit-id: e849a14189ff178134358d4ceed87955bc9f8eae --- include/Nazara/Math/Vector2.inl | 12 +++++++----- include/Nazara/Math/Vector3.inl | 12 +++++++----- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/include/Nazara/Math/Vector2.inl b/include/Nazara/Math/Vector2.inl index 7bfe930e0..227d95425 100644 --- a/include/Nazara/Math/Vector2.inl +++ b/include/Nazara/Math/Vector2.inl @@ -150,11 +150,13 @@ NzVector2& NzVector2::Minimize(const NzVector2& vec) template NzVector2& NzVector2::Normalize(T* length) { - T norm = std::sqrt(GetSquaredLength()); - T invNorm = F(1.0) / norm; - - x *= invNorm; - y *= invNorm; + T norm = GetLength(); + if (norm > F(0.0)) + { + T invNorm = F(1.0) / norm; + x *= invNorm; + y *= invNorm; + } if (length) *length = norm; diff --git a/include/Nazara/Math/Vector3.inl b/include/Nazara/Math/Vector3.inl index 15ad4c95e..f300330b8 100644 --- a/include/Nazara/Math/Vector3.inl +++ b/include/Nazara/Math/Vector3.inl @@ -231,11 +231,13 @@ template NzVector3& NzVector3::Normalize(T* length) { T norm = GetLength(); - T invNorm = F(1.0) / norm; - - x *= invNorm; - y *= invNorm; - z *= invNorm; + if (norm > F(0.0)) + { + T invNorm = F(1.0) / norm; + x *= invNorm; + y *= invNorm; + z *= invNorm; + } if (length) *length = norm;