프랙탈 모양 그리기 (Koch 곡선)

Koch (코흐) 곡선



어쨌든 Koch 곡선은 이러한 "자기 유사성"을 가진 도형입니다.


그리는 방법의 단계는 다음과 같습니다.
  • 가로 (X 축 방향)에 길이 L의 직선을 그립니다
  • 이 선을 3등분하고, 중간의 직선의 가장자리를 2정점으로 하는 정삼각형을 그린다
  • 중간 직선 (정삼각형의 하단)을 끕니다
  • 각 측면에 대해 위의 3 단계를 적용한다는 것을 무한대로 반복합니다

  • 수작업은 물론, 프로그램에서도 무한대로 반복할 수 없기 때문에, 상기 스텝을 8까지 반복한 결과입니다.



    거북이 그래픽을 사용한 드로잉 코드



    이전에 그린 기사 「프랙탈 도형 그리기(도구편)」에서 소개한 간이 터틀 그래픽 라이브러리의 코드 turtle.cxx를 이용해, koch 곡선을 그리는 코드를 이하에 소개합니다.
    // kochmain.cxx
    #include <stdio.h>
    #include <math.h>
    void pd();
    void pu();
    void rt(float th);
    void lt(float th);
    void fd(float len);
    void bk(float len);
    
    void koch(float len, int n) {
      if(n > 0) {
        koch(len/3.0, n-1);
        lt(60.0);
        koch(len/3.0, n-1);
        rt(120.0);
        koch(len/3.0, n-1);
        lt(60.0);
        koch(len/3.0, n-1);
      } else {
        fd(len);
      }
    }
    
    int main(int argc, char **argv)
    {
       pd();
       rt(90.0);
       koch(10.0, 6);
    }
    

    빌드, 실행은 아래에서.
    $ g++ kochmain.cxx turtle.cxx -o kochmain
    $ ./kochmain > tt.dat
    

    그리기도 "프랙탈 도형 그리기(도구편)/그리기"과 마찬가지로 gnuplot을 사용합니다.

    Koch Snow-flake



    koch 곡선을 3개 조합해, 이하와 같은 그림을 그릴 수 있습니다.



    Snow-flake(눈송이)나, Island(섬)라고 불리는 것 같습니다.

    코드는 main을 아래와 같이 재기록하는 것으로 간단하게 구현할 수 있습니다.
    int main(int argc, char **argv)
    {
       pd();
       rt(90.0);
       for(int i = 0; i < 3; i++) {
         koch(10.0, 6);
         rt(120.0);
       }
    }
    

    koch "곡선]?



    Koch 곡선은 "곡선"이라는 이름이 붙습니다. 그러나, 순서적으로도, 프로그램적으로도, 그려져 있는 것은 「직선」이기 때문인가, 뭔가 건에 떨어지지 않는 곳이 있습니다.
    「無限にやったからといって曲線といって良い代物だろうか」
    

    그리고. .

    미분 불가능



    아마도 일반적으로 우리가 알고있는 (상정하는) 곡선의 대부분은

    "부드러운"

    곡선이기 때문일지도 모릅니다.

    이 말은, 수학의 말로 옮겨놓으면, 이 곡선상의 모든 곳이 「미분 가능」이라고 하는 것이 됩니다.
    그다지 엄격한 이야기에 돌입할 생각은 없지만, 이것은 코치 곡선이 어떤 모양인지 어쨌든 상상할 수 있는 열쇠가 될 것이라고 생각합니다.

    고교생 정도까지 배우는 2차 곡선이나 sin(x), cos(x)와 같은 함수로 그리는 곡선은 정의 영역의 범위에서 어떤 값을 가져와도 그 점에서 그 함수의 「기울기 '가 결정됩니다. 그러나 koch 곡선은 그렇지 않습니다.
    이러한 성질은 프랙탈한 성질을 가진 도형이 흔히 가지는 것 같습니다.

    프랙탈 차원



    그리고 수학적 개념 "프랙탈 차원"의 관점에서 koch 곡선을 바라 보는 것도 재미 있다고 생각합니다. 프랙탈 차원이라고 하는 차원은, 통상 우리가 사용하는 0(점), 1(선), 2(면), 3(입체)라고 하는 「정수 차원」뿐만 아니라, 그 중간의 「비정수 차원」을 취급합니다. 예를 들어, koch 곡선의 프랙탈 차원은
    1.2618595
    

    라는 것입니다( Wikipedia 보다).

    이번은 이상입니다.

    좋은 웹페이지 즐겨찾기