프랙탈의 유형은 기본형과 여러가지 변형이 존재한다. 대부분의 프랙탈 도형들은 선이나 등변삼각형 또는 사각형등의 형태를 기본으로 하고 있다. 또한 이런 프랙탈 도형들의 변형에 많이 응용하고 있는 것 중의 하나가 코흐곡선(Koch Curve)이다. 최초 기본 라인인 'initiator' 를 기준으로 이 선의 1/3 가운데 부분에 밑변이 없는 삼각형 형태의 선을 연결한다. 이렇게 이루어진 모양이 기본형태가 되기 때문에 '기본발생자(generator)' 가 된다. 각각의 변에 이와 같은 과정을 반복하면 되는데 이와같은 프로세스를 일정시간 계속하는 것을 '반복진행자(iterantion generator)' 라 한다.
Initiator(하나의 직선으로 시작)
3등분의 지점으로 나눈다
Generator(밑변이 없고 한변이 'Initiator'의 1/3 인 크기의 등변 삼각형)
알고리즘
{
1. n-1차 코흐 곡선 1개를 그린다. (길이는 n차 곡선의 1/3배이다.)
2. 방향을 오른쪽으로 -60도 돌린다.
3. 다시 n-1차 코흐 곡선 1개를 그린다.
4. 방향을 왼쪽으로 120도 돌린다.
5. 세번째 n-1차 코흐 곡선 1개를 그린다.
6. 방향을 다시 오른쪽으로 -60도 돌린다.
7. 마지막 n-1차 코흐 곡선 1개를 그린다.
}
n차 코흐 곡선을 그리기 위해서 차수를 하나씩 줄이며 0차가 될때까지 재귀호출하여 그린다.
;Koch Curve Fractals - 2008/12/20
;Written By Daeyong Kwon
;http://fractalart.tistory.com
;Tip: Use Blitz Basic For Execution http://www.blitzbasic.com
;Written By Daeyong Kwon
;http://fractalart.tistory.com
;Tip: Use Blitz Basic For Execution http://www.blitzbasic.com
Global x# = 80
Global y# = 300
dir#=0
Len#= 480*3
Global y# = 300
dir#=0
Len#= 480*3
Graphics 640,480,0,2
For n = 0 To 6
Cls
koch(0,Len#, n) ;코흐생성 함수를 호출
Text 80,308,"Level:"+n
x#=80
y#=300
Len#=Len#/3
WaitKey()
Next
Cls
koch(0,Len#, n) ;코흐생성 함수를 호출
Text 80,308,"Level:"+n
x#=80
y#=300
Len#=Len#/3
WaitKey()
Next
Function koch(dir#,Len#,n)
;코흐곡선을 그린다 '_∧_'
;dir# : 각도
;len# : 길이
;n : 차수
If n > 0
koch(dir#,Len#,n-1) ; draw _
x#=x#+Len#/3*Cos(dir#) ; draw /
y#=y#+Len#/3*Sin(dir#)
dir# = dir#-60
koch(dir#,Len#,n-1)
x#=x#+Len#/3*Cos(dir#) ; draw \
y#=y#+Len#/3*Sin(dir#)
dir# = dir#+120
koch(dir#,Len#,n-1)
x#=x#+Len#/3*Cos(dir#) ; draw _
y#=y#+Len#/3*Sin(dir#)
dir# = dir#-60
koch(dir#,Len#,n-1)
Else
newx#=x#+Len#/3*Cos(dir#) ;진행방향의 좌표를 생성
newy#=y#+Len#/3*Sin(dir#)
Line x,y ,newx,newy
EndIf
End Function
koch(dir#,Len#,n-1) ; draw _
x#=x#+Len#/3*Cos(dir#) ; draw /
y#=y#+Len#/3*Sin(dir#)
dir# = dir#-60
koch(dir#,Len#,n-1)
x#=x#+Len#/3*Cos(dir#) ; draw \
y#=y#+Len#/3*Sin(dir#)
dir# = dir#+120
koch(dir#,Len#,n-1)
x#=x#+Len#/3*Cos(dir#) ; draw _
y#=y#+Len#/3*Sin(dir#)
dir# = dir#-60
koch(dir#,Len#,n-1)
Else
newx#=x#+Len#/3*Cos(dir#) ;진행방향의 좌표를 생성
newy#=y#+Len#/3*Sin(dir#)
Line x,y ,newx,newy
EndIf
End Function
프로그램 실행화면
응용사례
koch sun
코흐 알고리즘으로 자연에서 관찰할 수 있는 대표적 예는 눈꽃결정체(Snowflake)이다. 그리고 해안선이나 지표면의 경계선등의 묘사에 응용될 수 있으며 경제모델 시뮬레이션등에도 활용되어진다.
'About Fractal' 카테고리의 다른 글
프랙탈 나무(Fractal Tree) (1) | 2008.12.22 |
---|---|
원형순환프랙탈(Circular infinity) (0) | 2008.12.09 |
베이직(basic)언어로 구현한 시에르핀스키삼각형(Sierpinski Gasket) (1) | 2008.11.29 |
프랙탈 이야기 2편 (1) | 2008.11.22 |
프랙탈 이야기 1편 (2) | 2008.11.22 |