long Mandelbulb3D(double ar, double ai, double aj, double ak, double br, double bi, double bj, double bk, long zkl, bool invers)
{
double aar, aai, aaj;
long tw;
int n;
int pow = 8; // n=8 entspricht dem Mandelbulb
double theta, phi;
double r_n = 0;
aar = ar * ar; aai = ai * ai; aaj = aj * aj; //aak = ak * ak;
tw = 0L;
double r = Math.Sqrt(aar + aai + aaj);
for (n = 1; n < zkl; n++)
{
theta = Math.Atan2(Math.Sqrt(aar + aai), aj);
phi = Math.Atan2(ai, ar);
r_n = Math.Pow(r, pow);
ar = r_n * Math.Sin(theta * pow) * Math.Cos(phi * pow);
ai = r_n * Math.Sin(theta * pow) * Math.Sin(phi * pow);
aj = r_n * Math.Cos(theta * pow);
ar += br;
ai += bi;
aj += bj;
aar = ar * ar; aai = ai * ai; aaj = aj * aj;// aak = ak * ak;
r = Math.Sqrt(aar + aai + aaj);
if (r > gr) { tw = n; break; }
}
if (invers)
{
if (tw == 0)
tw = 1;
else
tw = 0;
}
return (tw);
}