再帰図形

  1. 再帰図形
    再帰図形は、再帰的に定義される図形で、フラクタル図形とも多くの共通点があります。
    ここではSierpinskiが発見した、再帰図形を紹介します。

  2. 手法
    1. n次の図形をn-1次の図形から定義します。
      n次のSierpinski図形をs(n)とします。
       s(n)は、a(n)、b(n)、c(n)、d(n)、から定義されます。
       また、a(n)は、a(n-1) b(n-1) d(n-1) a(n-1) から再帰的に定義されます。詳細な定義はプログラムを参照して下さい。

    2. n=1,2,3 の次数のSierpinsky図形を示します。
      1.   

    3. 描画サイズと先頭位置
      描画するサイズをh0=2nとします。n=0の場合、単位描画長hはh0/4、描画を開始する位置を(x0、y0)とすると、 x0=2*h;y0=3*h; となります。次数が一つ増えると、
       x0=x0-h;
       h=h/2;
       y0=y0+h;
      となります。

  3. プロジェクト
    1. パラメータ
      描画する次数を定めます。

    2. paint(Graphics g)
      s(n)を表示します。描画開始この位置は、描画する次数で変化します。
      int order=3,h0=512; h=h0/4; x0=2*h;y0=3*h; order=Integer.parseInt(textField1.getText()); if(order>6) { order=6; textField1.setText("6"); } for(i=0;i<=order;i++){ x0=x0-h; h=h/2;y0=y0+h; if(i==order){ x=x0;y=y0;setplot(); da(i,g); x +=h; y -=h;plot(g); db(i,g); x -=h;y -=h;plot(g); dc(i,g); x -=h;y +=h;plot(g); dd(i,g); x +=h;y +=h;plot(g); } } }
    3. da(i)
      次数iの描画手続きです。次数(i-1)の描画手続きを接続して、描画しています。
       public void da(int i,Graphics g){
          if(i>0){
            da(i-1,g); x +=h;y -=h;plot(g);
            db(i-1,g); x +=2*h;plot(g);
            dd(i-1,g); x +=h;y +=h;plot(g);
            da(i-1,g);
          }
        } 

    4. button1_actionPerformed()
      次数を上下するボタンの処理関数です。次数は0以上、6以下になるよう制限します。

  4. 実行 
    次数を定めて描画します。ボタンで次数を増加、減少します。



  5. ダウンロード
    このプロジェクトをダウンロードできます。次の行をクリックして、sierpin.exeファイルを適当なフォルダに保存します。
    ダウンロード開始
    このファイルは自己解凍型の圧縮ファイルです。このファイルを実行すると指定したフォルダに必要なファイルが生成されます。