code: function(vector) {
      var V = vector.elements || vector;
      var n = this.elements.length, k = n, i;
      if (n != V.length) { return null; }
      var dot = 0, mod1 = 0, mod2 = 0;
      // Work things out in parallel to save time
      this.each(function(x, i) {
        dot += x * V[i-1];
        mod1 += x * x;
        mod2 += V[i-1] * V[i-1];
      });
      mod1 = Math.sqrt(mod1); mod2 = Math.sqrt(mod2);
      if (mod1*mod2 === 0) { return null; }
      var theta = dot / (mod1*mod2);
      if (theta < -1) { theta = -1; }
      if (theta > 1) { theta = 1; }
      return Math.acos(theta);
    }
docs: Returns the angle between the vector and the argument (also a vector)