void cart2spherical(vec3_t x, double &alpha, double &beta, double &r) { r = x.abs(); static const vec3_t ex(1,0,0); vec3_t xy(x[0],x[1],0); if (x[1] >= 0) { alpha = angle(ex, xy); } else { alpha = 2*M_PI - angle(xy, ex); } if (xy.abs2() > 0) { if (x[2] >= 0) { beta = angle(xy, x); } else { beta = -angle(xy, x); } } else { beta = 0.5*M_PI; } }