This avoids introducing NaNs due to numerical error while measuring
extreme angles -- angles near 0 or pi radians.
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/