PostAddsense


Mandelbrot Topcoder



public class Mandelbrot
{
    public int iterations(int max, double a, double b) {
        double za = a, zb = b;
        for (int i=0; i <= max; i++) {
            if (za*za+zb*zb > 4) return i;
            double a2 = za*za - zb*zb + a;
            double b2 = 2*za*zb + b;
            za = a2;
            zb = b2;
        }

        return -1;
    }
}


Explanation

크기(magnitude)는 2보다 커야 하므로
√(a*a+b*b) > 2

양 변을 제곱하면 더 풀기 쉬워지므로
(a*a+b*b) > 4


Z0 = C
Zn+1 = Zn * Zn + C


위 공식에서 C는 a + bi이고, Zn*Zn 부분은 a2 + 2abi - b2 이므로 다음 공식을 만들 수 있다.
실수 부분 : (a2 - b2 + a)
허수 부분 : (2*a*b + b)i

※ 크기에서 a와 b만 필요하므로 허수 i는 필요하지 않다.


References