docs: function(k, p, o, order) {
          order = order || Vec3.defaultRotationOrder;
          var cos = Math.cos;
          var sin = Math.sin;
          
          switch(order.toUpperCase()){
              case 'ZYX':
                  return new Vec3(
                      (cos(p)*cos(k)*this.x+cos(p)*sin(k)*this.y+(-sin(p))*this.z),
                      ((sin(o)*sin(p)*cos(k)+cos(o)*(-sin(k)))*this.x+(sin(o)*sin(p)*sin(k)+cos(o)*cos(k))*this.y+sin(o)*cos(p)*this.z),
                      ((cos(o)*sin(p)*cos(k)+(-sin(o))*(-sin(k)))*this.x+(cos(o)*sin(p)*sin(k)+(-sin(o))*cos(k))*this.y+cos(o)*cos(p)*this.z)
                  );
              case 'YZX':
                  return new Vec3(
                      (cos(p)*cos(k)*this.x+sin(p)*this.y+cos(p)*(-sin(k))*this.z),
                      ((cos(o)*(-sin(p))*cos(k)+sin(o)*sin(k))*this.x+cos(o)*cos(p)*this.y+(cos(o)*(-sin(p))*(-sin(k))+sin(o)*cos(k))*this.z),
                      ((((-sin(o))*(-sin(p)))*cos(k)+cos(o)*sin(k))*this.x+(-sin(o))*cos(p)*this.y+(((-sin(o))*(-sin(p)))*(-sin(k))+cos(o)*cos(k))*this.z)
                  );
              case 'ZXY':
                  return new Vec3(
                      ((cos(o)*cos(k)+((-sin(o))*(-sin(p)))*(-sin(k)))*this.x+(cos(o)*sin(k)+((-sin(o))*(-sin(p)))*cos(k))*this.y+(-sin(o))*cos(p)*this.z),
                      (cos(p)*(-sin(k))*this.x+cos(p)*cos(k)*this.y+sin(p)*this.z),
                      ((sin(o)*cos(k)+cos(o)*(-sin(p))*(-sin(k)))*this.x+(sin(o)*sin(k)+cos(o)*(-sin(p))*cos(k))*this.y+cos(o)*cos(p)*this.z)
                  );
              case 'XZY':
                  return new Vec3(
                      (cos(o)*cos(p)*this.x+(cos(o)*sin(p)*cos(k)+(-sin(o))*(-sin(k)))*this.y+(cos(o)*sin(p)*sin(k)+(-sin(o))*cos(k))*this.z),
                      ((-sin(p))*this.x+cos(p)*cos(k)*this.y+cos(p)*sin(k)*this.z),
                      (sin(o)*cos(p)*this.x+(sin(o)*sin(p)*cos(k)+cos(o)*(-sin(k)))*this.y+(sin(o)*sin(p)*sin(k)+cos(o)*cos(k))*this.z)
                  );
              case 'YXZ':
                  return new Vec3(
                      ((cos(o)*cos(k)+sin(o)*sin(p)*sin(k))*this.x+sin(o)*cos(p)*this.y+(cos(o)*(-sin(k))+sin(o)*sin(p)*cos(k))*this.z),
                      (((-sin(o))*cos(k)+cos(o)*sin(p)*sin(k))*this.x+cos(o)*cos(p)*this.y+((-sin(o))*(-sin(k))+cos(o)*sin(p)*cos(k))*this.z),
                      (cos(p)*sin(k)*this.x+(-sin(p))*this.y+cos(p)*cos(k)*this.z)
                  );
              default:
              case 'XYZ':
                  return new Vec3(
                      (cos(o)*cos(p)*this.x+(sin(o)*cos(k)+cos(o)*(-sin(p))*(-sin(k)))*this.y+(sin(o)*sin(k)+cos(o)*(-sin(p))*cos(k))*this.z),
                      ((-sin(o))*cos(p)*this.x+(cos(o)*cos(k)+((-sin(o))*(-sin(p)))*(-sin(k)))*this.y+(cos(o)*sin(k)+((-sin(o))*(-sin(p)))*cos(k))*this.z),
                      (sin(p)*this.x+cos(p)*(-sin(k))*this.y+cos(p)*cos(k)*this.z)
                  );
          }
              
      }