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(