본문 바로가기

About Fractal

코흐곡선(Koch Curve)

프랙탈의 유형은 기본형과 여러가지 변형이 존재한다. 대부분의 프랙탈 도형들은 선이나 등변삼각형 또는 사각형등의 형태를 기본으로 하고 있다. 또한 이런 프랙탈 도형들의 변형에 많이 응용하고 있는 것 중의 하나가 코흐곡선(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
Global x# = 80
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

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 sun


코흐 알고리즘으로 자연에서 관찰할 수 있는 대표적 예는 눈꽃결정체(Snowflake)이다. 그리고 해안선이나 지표면의 경계선등의 묘사에 응용될 수 있으며 경제모델 시뮬레이션등에도 활용되어진다.