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
최근 덧글