From: Scott Worley Date: Mon, 31 Dec 2012 06:56:34 +0000 (-0800) Subject: Explicitly bounds-check in angle_between() X-Git-Url: http://git.scottworley.com/nt3d/commitdiff_plain/72eac64d07af484314745fd0e9466e0f94915684?hp=9ff1b1e6e6409df1fd67ed486b21033ddb39273f Explicitly bounds-check in angle_between() This avoids introducing NaNs due to numerical error while measuring extreme angles -- angles near 0 or pi radians. --- diff --git a/nt3d.js b/nt3d.js index 9eee504..0389946 100644 --- a/nt3d.js +++ b/nt3d.js @@ -259,7 +259,14 @@ nt3d = { point[2] + offset[2]]; }, angle_between: function(a, b) { // a and b must be unit vectors - return Math.acos(this.dot(a, b)); + var the_dot = this.dot(a, b); + if (the_dot <= -1) { + return Math.PI; + } + if (the_dot >= 1) { + return 0; + } + return Math.acos(the_dot); }, rotate_about_origin: function(points, axis, angle) { // axis must be a unit vector // From http://inside.mines.edu/~gmurray/ArbitraryAxisRotation/