Fractrace.Formulas.H6 C# (CSharp) 메소드

H6() 개인적인 메소드

Abgeänderte Form vom Mandelbulb
private H6 ( double ar, double ai, double aj, double ak, double br, double bi, double bj, double bk, long zkl, bool invers ) : long
ar double
ai double
aj double
ak double
br double
bi double
bj double
bk double
zkl long
invers bool
리턴 long
        long H6(double ar, double ai, double aj, double ak, double br, double bi, double bj, double bk, long zkl, bool invers)
        {
            double aar, aai, aaj, aak;
            long tw;
            int n;
            int pow = 8; // n=8 entspricht dem Mandelbulb
            double theta, phi;
            double theta1;

            double r_n = 0;
            aar = ar * ar; aai = ai * ai; aaj = aj * aj; aak = ak * ak;
            tw = 0L;
            double r = aar + aai + aaj + aak;
            double sintheta = 0;
            for (n = 1; n < zkl; n++)
            {

                theta = Math.Atan2(aar + aai, aj);
                theta1 = Math.Atan2(aar + aai, ak);
                phi = Math.Atan2(ai, ar);
                r_n = Math.Pow(r, pow);
                sintheta = Math.Sin(theta * pow) + Math.Sin(theta1 * pow);
                ar = r_n * (sintheta * Math.Cos(phi * pow));
                ai = r_n * (sintheta * Math.Sin(phi * pow));
                aj = r_n * (Math.Cos(theta * pow));
                ak = r_n * (Math.Cos(theta1 * pow));

                ar += br;
                ai += bi;
                aj += bj;
                ak += bk;

                aar = ar * ar; aai = ai * ai; aaj = aj * aj; aak = ak * ak;
                r = Math.Sqrt(aar + aai + aaj + aak);

                if (r > gr) { tw = n; break; }

            }

            if (invers)
            {
                if (tw == 0)
                    tw = 1;
                else
                    tw = 0;
            }
            return (tw);
        }