베이직(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) 예제2)라인과 컬러를 이용한 변형 예제3)
예제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
기본 알고리즘을 가지고 여러가지 변형을 할 수 있다. 이런 변형공식이나 변수값에 따라 창의적인 결과물들을 얻을 수 있는 것이다. 변형시켜 보자.
예제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
예제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
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 |