From 924a35188cfb9034e975c6da7ec5a301d1f71e36 Mon Sep 17 00:00:00 2001 From: Revar Desmera <revarbat@gmail.com> Date: Tue, 9 Oct 2018 15:34:26 -0700 Subject: [PATCH] Fixed crazy FP rounding error in vector3d_angle() --- math.scad | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/math.scad b/math.scad index 93524bd..58feb4e 100644 --- a/math.scad +++ b/math.scad @@ -207,7 +207,8 @@ function normalize(v) = v/norm(v); function vector2d_angle(v1,v2) = atan2(v1[1],v1[0]) - atan2(v2[1],v2[0]); // Returns angle in degrees between two 3D vectors. -function vector3d_angle(v1,v2) = acos((v1*v2)/(norm(v1)*norm(v2))); +// NOTE: min and max are to correct for crazy FP rounding errors that exceed acos()'s domain. +function vector3d_angle(v1,v2) = acos(max(-1,min(1,(v1*v2)/(norm(v1)*norm(v2))))); // Returns a slice of an array. An index of 0 is the array start, -1 is array end function slice(arr,st,end) = let(