X-Git-Url: http://git.scottworley.com/nt3d/blobdiff_plain/34592f10eb3e47c8f6738aceb5ff5ea48acb089c..08b46dbddc6defd45926a69631e3a09ea2273e45:/nt3d.js?ds=inline diff --git a/nt3d.js b/nt3d.js index 9eee504..7198e22 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/ @@ -281,8 +288,8 @@ nt3d = { // by crossing a and b to get a rotation axis and using // angle_between to get a rotation angle. var angle = this.angle_between(this.unit(a), this.unit(b)); - if (Math.abs(angle) < 1e-15) { - // No siginificant rotation to perform. Bail to avoid + if (Math.abs(angle) < 1e-7) { + // No significant rotation to perform. Bail to avoid // NaNs and numerical error return points; }