본문 바로가기

About Fractal

베이직(basic)언어로 구현한 시에르핀스키삼각형(Sierpinski Gasket)

베이직(basic)언어로 구현한 시에르핀스키삼각형(Sierpinski Gasket)

작성자:2008.11.29 권대용(Lunartail)

사실 본인은 수학자도 과학자도 아니지만 프랙탈에 관심을 가지게 된건 오래전 일이다. 지금도 그렇지만 시뮬레이션이나 우주에 대한 지적 호기심이 많았던 때이다. 그 당시 회사동료중 프로그래머인 한 친구가 짐을 정리하면서 두터운 책을 하나 버리려고 하기에 봤더니 프랙탈에 관한 두툼한 원문서였다. 그래서 그걸 가지고 집에와서 유심히 살펴봤지만 참 심오하면서 수학에는 문외한인 내가 보기에는 어려운 책(원서라서-_-)이라 책장에 한동안 넣어놨다 심심하면 한번씩 꺼내 보던 기억이 난다^^

시에르핀스키삼각형은 프랙탈에 입문할때 접하게 되는 기본적인 알고리즘의 하나이다. 이 알고리즘은 의외로 매우 간단하게 구현해 볼 수 있다. 언어는 C나 다른 언어로 해도 무방하다. 다만 여기에서는 블리츠베이직(Blitz Basic/Blitz3D)을 사용하였다. 참고로 블리츠베이직은 그래픽과 게임용으로 제작된 언어로 이해하기 쉬우며 편리하게 코드를 작성할 수 있다.



Binary address에 의한 '시에르핀스키 삼각형'의 기본 알고리즘 코드


If (x And (y-x)) = 0 Then
       Plot x + 158 - 0.5 * y , y + 30)

놀랍게도 코드는 실제 매우 간단하지만 이에 대한 설명이 필요하다. 정확하게 말하면 이 알고리즘은 '시에르핀스키 삼각형'의 연산을 하는 것이 아니다. '코흐라인'을 바탕으로 한 알고리즘을 이용하는 것이 정석일 수 있지만  이것은 파스칼삼각형(Pascal triangle)의 '컬러코딩연산'을 한다. 처리 속도면에서 이 방식이 단순하고 매우 빠르다. 파스칼삼각형을 만들기 위해서는 해당 인덱스값에서 홀수값의 부분만 찾아내 랜더링 하면 된다. 파스칼 삼각형에 대한 더 자세한 내용는 심오한 규칙이 있어서 더 자세한 설명은 생략한다.

실제로 구현하여 보자.

예제1)
For y=0 To 255
    For x=0 To y
        Color(x*2,y*2,x+y) ; Set RGB Colore
        If (x And (y-x)) =0 Then Plot x+158-0.5*y,y+30
    Next
Next

예제1)


기본 알고리즘을 가지고 여러가지 변형을 할 수 있다. 이런 변형공식이나 변수값에 따라 창의적인 결과물들을 얻을 수 있는 것이다. 변형시켜 보자.

예제2)
For y=0 To 255
      For x=0 To 255
          Color(x*2,y*2,x+y)
          If (x And y) = 0 Then Line x,y, x*1.5,y*1.5
      Next
Next

예제2)라인과 컬러를 이용한 변형


예제3)
For y=0 To 255
      For x=0 To 255
      Color(x*2,y*2,x*y)
      If (x + y) >0 Then Plot x+50,y+50
      Next 
Next

예제3)

조건문의 조건값과 컬러를 변형하여 얻은 결과물이다. 컬러는 프랙탈 이미지 표현의 중요한 요소이다. 만일 여기서 컬러값이 빠진다면 무의미한 사각형만을 보게 될테니 말이다. 이처럼 프랙탈을 이용한 다양한 알고즘의 변형으로 다채로운 패턴의 연출이 가능하므로 많은 실험을 통해 무긍무진한 의외의 결과물들을 얻을 수 있다.


참고문헌
Chaos and Fractals
New Frontiers of Science, 1992, Springer-verlag
※Bliz Basic은 Blitz Research(http://blitzbasic.com)의 등록상표입니다

'About Fractal' 카테고리의 다른 글

프랙탈 나무(Fractal Tree)  (1) 2008.12.22
코흐곡선(Koch Curve)  (0) 2008.12.13
원형순환프랙탈(Circular infinity)  (0) 2008.12.09
프랙탈 이야기 2편  (1) 2008.11.22
프랙탈 이야기 1편  (2) 2008.11.22