From 24e6f16f4aa574b182e4ec2361b22b4c3d71e34c Mon Sep 17 00:00:00 2001 From: Jeroen van Rijn Date: Sun, 28 Jul 2024 15:00:29 +0200 Subject: [PATCH] Clamp dot in `angle_between` to avoid precision errors. Fixes #3978 --- core/math/linalg/general.odin | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/core/math/linalg/general.odin b/core/math/linalg/general.odin index 90fe7332c..7587ad63f 100644 --- a/core/math/linalg/general.odin +++ b/core/math/linalg/general.odin @@ -275,7 +275,8 @@ to_ptr :: proc{vector_to_ptr, matrix_to_ptr} vector_angle_between :: proc "contextless" (a, b: $V/[$N]$E) -> E { a0 := normalize0(a) b0 := normalize0(b) - return math.acos(dot(a0, b0)) + d := clamp(dot(a0, b0), -1, +1) + return math.acos(d) } quaternion64_angle_between :: proc "contextless" (a, b: $Q/quaternion64) -> f16 { c := normalize0(conj(a) * b)