728x90
망델브로 집합(Mandelbrot set)
망델브로 집합은 브누아 망델브로가 고안한 프랙탈의 일종입니다.

수열[Zn]의 절댓값이 무한대로 발산하지 않는 복소수 c의 집합으로 정의됩니다.
이를 복소수를 사용하지 않고 정의하려면 모든 복소수를 실수부와 허수부로 나누면 됩니다.
실제로 무한한 항까지 계산하여 발산 여부를 확인하는 것이 어려우므로 어떤 n에 대해 |Zn| > 2일 경우 발산한다는 성질을 이용합니다. 즉, 수열을 계산하다가 절댓값이 2를 넘는 점은 배제하고 그리면 되는 것입니다. 수학적으로는 어떤 점이 망델브로 집합에 포함되거나 포함되지 않거나의 두 가지 경우밖에 없으므로 흑백으로만 그래도 상관은 없지만 대부분의 경우 처음으로 |Zn| > 2를 넘는 경우 배경을 칠합니다.
위 식을 이용하여 망델브로 집합 코드를 작성했습니다.
void ft_mandelbrot(t_complex c, t_fractol *f)
{
int i;
t_complex z;
double tmpx;
z.x = c.x;
z.y = c.y;
i = 0;
while (i < ITERATION && (z.x * z.x) + (z.y * z.y) < 4)
{
tmpx = (z.x * z.x) - (z.y * z.y);
z.y = (2 * z.x * z.y) + c.y;
z.x = tmpx + c.x;
i++;
}
}
쥘리아 집합 (Julia set)


줄리아 집합의 경우
void ft_julia(t_complex c, t_fractol *f)
{
t_complex z;
double tmp;
int i;
i = 0;
z.x = c.x;
z.y = c.y;
while (i < ITERATION && (z.x * z.x) + (z.y * z.y) < 4)
{
tmp = z.x;
z.x = (z.x * z.x) - (z.y * z.y) + f->julia.x;
z.y = (2 * tmp * z.y) + f->julia.y;
i++;
}
f->i = i;
}
불타는 배 프랙탈 (Burning Ship fractal)


void ft_mandelbrot(t_complex c, t_fractol *f)
{
int i;
t_complex z;
double tmpy;
z.x = c.x;
z.y = c.y;
i = 0;
while (i < ITERATION && (z.x * z.x) + (z.y * z.y) < 4)
{
tmpy = (z.x * z.y);
z.x = (z.x * z.x) - (z.y * z.y) + c.x;
z.y = 2 * abs(tmpy) + c.y;
i++;
}
}
728x90
반응형
'42 SEOUL > 2_frect-ol' 카테고리의 다른 글
[42Seoul/fract'ol] mlx 함수 (1) | 2022.07.27 |
---|---|
[42Seoul/fract'ol] 프랙탈(fractal)이란 ? (0) | 2022.07.27 |
[42Seoul/fract'ol] 프로젝트 소개 (0) | 2022.07.26 |
댓글