Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬으로 그리는 반슬리 고사리(Barnsley Fern): IFS 프랙탈 완벽 가이드

반슬리 고사리란 무엇인가?

이 튜토리얼에서는 수학자 마이클 반슬리(Michael Barnsley)가 고안한 반슬리 고사리(Barnsley Fern)에 대해 알아보겠습니다. 반슬리 고사리는 실제 고사리(양치식물)의 잎 모양과 놀라울 정도로 흡사한 프랙탈 도형으로, 4개의 수학 방정식을 반복적으로 적용하는 반복 함수 시스템(Iterated Function System, IFS)을 통해 생성됩니다.

변환 공식

반슬리 고사리를 만드는 변환은 다음과 같은 어파인 변환(Affine Transformation) 공식을 따릅니다.

f(x,y)=$$\begin{bmatrix}a & b \\c & d \end{bmatrix}\begin{bmatrix}x \\y \end{bmatrix}+\begin{bmatrix}e \\f \end{bmatrix}$$

출처: Wikipedia

계수 값

공식에 사용되는 변수들의 값은 다음과 같습니다.

함수abcdef확률(p)
f₁0000.16000.01
f₂0.850.04-0.040.8501.60.85
f₃0.2-0.260.230.2201.60.07
f₄-0.150.280.260.2400.440.07

출처: Wikipedia

4가지 변환 방정식의 역할

반슬리가 제안한 4개의 방정식은 각각 지정된 확률에 따라 선택되어 적용됩니다.

  • f₁ (확률 1%): 고사리 줄기의 최하단 부분을 담당하며, 점을 원점 방향으로 이동시킵니다.
  • f₂ (확률 85%): 가장 높은 빈도로 적용되며, 고사리 잎의 전체적인 형태를 위쪽으로 점진적으로 확장합니다.
  • f₃ (확률 7%): 왼쪽에 위치한 잔가지(잎)를 생성합니다.
  • f₄ (확률 7%): 오른쪽에 위치한 잔가지(잎)를 생성합니다.

파이썬으로 구현하기

이제 파이썬 코드를 사용하여 고사리 모양을 직접 그려보겠습니다.

예제 코드

# 그래프 출력을 위한 matplotlib 모듈 임포트
import matplotlib.pyplot as plot
# 난수 생성을 위한 random 모듈 임포트
import random

# 리스트 초기화
x = [0]
y = [0]

# 현재 위치를 추적하기 위한 변수 초기화
current = 0

for i in range(1, 1000):
    # 1부터 100 사이의 난수 생성
    z = random.randint(1, 100)
    # z의 범위에 따라 해당하는 값을 x와 y에 추가
    if z == 1:
        x.append(0)
        y.append(0.16 * y[current])
    if z >= 2 and z <= 86:
        x.append(0.85 * x[current] + 0.04 * y[current])
        y.append(-0.04 * x[current] + 0.85 * y[current] + 1.6)
    if z >= 87 and z <= 93:
        x.append(0.2 * x[current] - 0.26 * y[current])
        y.append(0.23 * x[current] + 0.22 * y[current] + 1.6)
    if z >= 94 and z <= 100:
        x.append(-0.15 * x[current] + 0.28 * y[current])
        y.append(0.26 * x[current] + 0.24 * y[current] + 0.44)
    # current 값 증가
    current += 1

# x와 y 좌표로 산점도 그래프 출력
plot.scatter(x, y, s=0.2, edgecolor='green')
plot.show()

실행 결과

위 코드를 실행하면 다음과 같은 결과를 얻을 수 있습니다.

파이썬으로 그리는 반슬리 고사리(Barnsley Fern): IFS 프랙탈 완벽 가이드

1,000회의 반복만으로도 고사리의 기본 형태가 나타납니다. 반복 횟수를 10,000회, 100,000회 등으로 늘리면 잎의 세부 구조까지 선명하게 드러나는 훨씬 정교하고 아름다운 고사리 프랙탈을 관찰할 수 있습니다.

결론

이번 튜토리얼에서는 반복 함수 시스템(IFS)을 활용하여 파이썬으로 반슬리 고사리 프랙탈을 그리는 방법을 배웠습니다. 단 4개의 간단한 방정식과 난수만으로 자연 속 복잡한 생명체의 형태가 재현된다는 점에서, 프랙탈 기하학의 매력을 실감할 수 있었습니다. 튜토리얼 내용에 대해 궁금한 점이 있다면 댓글로 남겨주세요.

참고 자료: Wikipedia