private static float distanceOnSphere(float[] p, float[] q) { double x = p[0]+q[0]; double y = p[1]+q[1]; double z = p[2]+q[2]; double d = x*x+y*y+z*z; if (d==0.0) { d = PI; } else if (d==4.0) { d = 0.0; } else { d = 2.0*atan(sqrt((4.0-d)/d)); } return (float)d; //return (float)acos(p[0]*q[0]+p[1]*q[1]+p[2]*q[2]); }
if (denom<DET_SMALL && -denom<DET_SMALL) denom = DET_SMALL; double theta = 0.5*atan(SQRT3*(f2-f3)/denom); double ctheta = cos(theta); double stheta = sin(theta);