JAvaフラクタル描画コッハ雪花曲線(コッハ曲線)コード共有

5500 ワード

まず例を挙げます.ブロッコリーの小さなクラスタはクラスタ全体の分岐であり、異なるスケールでは自己相似の外形を持っていることがわかります.言い換えれば、小さな分岐は、適切な割合を拡大することによって、全体とほぼ完全に一致する花群を得ることができる.したがって,ブロッコリークラスタはフラクタルの例と言える.フラクタルには一般的に以下の特質がある:任意の小さなスケールで精細な構造がある;あまりにも不規則で、伝統的なオーステナイト幾何学の言語で説明しにくい.(少なくとも大略的または任意に)自己相似のハウスドフ次元はトポロジー次元よりも大きく、簡単な再帰的定義がある.(i)フラクタルセットは、任意の小さなスケールでのスケール詳細、または微細な構造を有する.(ii)フラクタルセットは、いくつかの条件を満たす点の軌跡でも、いくつかの単純な方程式の解集でもない従来の幾何学的言語では記述できない.(iii)フラクタルセットは、近似的な自己相似または統計的な自己相似である可能性がある.(iv)一般的に、フラクタルセットの「フラクタル次元」は、対応するトポロジー次元よりも厳格に大きい.(v)ほとんどの興味深い状況では、フラクタルセットは非常に簡単な方法で定義され、変換の反復で生成される可能性があります.javaでフラクタルを書く場合、異なる図形は異なる画法に基づいて再帰を呼び出して実現されます.例えば、コッハ曲線:
 
  
public void draw1(int x1, int y1, int x2, int y2,int depth) {//    keleyi.com
        g.drawLine(x1, y1, x2, y2); 
        if (depth<=1) 
            return; 
        else {//  
            double x11 = (x1 * 2  + x2)  / 3; 
            double y11 = (y1 * 2  + y2) / 3; 

            double x22 = (x1 + x2 * 2) / 3; 
            double y22 = (y1 + y2 * 2) / 3; 

            double x33 = (x11 + x22) / 2 - (y11 - y22) * Math.sqrt(3) / 2; 
            double y33 = (y11 + y22) / 2 - (x22 - x11) * Math.sqrt(3) / 2; 

            g.setColor(j.getBackground()); 
            g.drawLine((int) x1, (int) y1, (int) x2, (int) y2); 
            g.setColor(Color.black); 
            draw1((int) x1, (int) y1, (int) x11, (int) y11,depth-1); 
            draw1((int) x11, (int) y11, (int) x33, (int) y33,depth-1); 
            draw1((int) x22, (int) y22, (int) x2, (int) y2,depth-1); 
            draw1((int) x33, (int) y33, (int) x22, (int) y22,depth-1); 
        } 
    }

正方形:
 
  
public void draw2(int x1, int y1, int m,int depth) {// keleyi.com 
        g.fillRect(x1, y1, m, m); 
        m = m / 3; 
        if (depth<=1) 
            return; 
        else{ 
        double x11 = x1 - 2 * m; 
        double y11 = y1 - 2 * m; 

        double x22 = x1 + m; 
        double y22 = y1 - 2 * m; 

        double x33 = x1 + 4 * m; 
        double y33 = y1 - 2 * m; 

        double x44 = x1 - 2 * m; 
        double y44 = y1 + m; 

        double x55 = x1 + 4 * m; 
        double y55 = y1 + m; 

        double x66 = x1 - 2 * m; 
        double y66 = y1 + 4 * m; 

        double x77 = x1 + m; 
        double y77 = y1 + 4 * m; 

        double x88 = x1 + 4 * m; 
        double y88 = y1 + 4 * m; 

        draw2((int) x11, (int) y11, (int) m,depth-1); 

        draw2((int) x22, (int) y22, (int) m,depth-1); 

        draw2((int) x33, (int) y33, (int) m,depth-1); 

        draw2((int) x44, (int) y44, (int) m,depth-1); 

        draw2((int) x55, (int) y55, (int) m,depth-1); 

        draw2((int) x66, (int) y66, (int) m,depth-1); 

        draw2((int) x77, (int) y77, (int) m,depth-1); 

        draw2((int) x88, (int) y88, (int) m,depth-1); 
        } 

    }

謝氷斯基三角形:
 
  
public void draw3(int x1,int y1,int x2,int y2,int x3,int y3,int depth){//    keleyi.com

        double s = Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1)); 
        g.drawLine(x1,y1,x2,y2); 
        g.drawLine(x2,y2,x3,y3); 
        g.drawLine(x1,y1,x3,y3); 
//      if(s<3) 
//          return; 
        if (depth<=1) 
            return; 
        else 
        { 
        /*
         *
         */ 
        double x11=(x1*3+x2)/4; 
        double y11=y1-(s/4)*Math.sqrt(3); 

        double x12=(x1+x2*3)/4; 
        double y12=y11; 

        double x13=(x1+x2)/2; 
        double y13=y1; 

        /*
         *
         */ 
        double x21=x1-s/4; 
        double y21=(y1+y3)/2; 

        double x22=x1+s/4; 
        double y22=y21; 

        double x23=x1; 
        double y23=y3; 

        /*
         *
         */ 
        double x31=x2+s/4; 
        double y31=(y1+y3)/2; 

        double x32=x2-s/4; 
        double y32=y21; 

        double x33=x2; 
        double y33=y3; 

         
        draw3((int)x11,(int)y11,(int)x12,(int)y12, (int)x13, (int)y13, depth-1); 
        draw3((int)x21,(int)y21,(int)x22,(int)y22, (int)x23, (int)y23, depth-1); 
        draw3((int)x31,(int)y31,(int)x32,(int)y32, (int)x33, (int)y33, depth-1); 
        } 
    }

コッハ曲線は雪のような形をした幾何学的曲線であるため、雪の曲線とも呼ばれ、分形曲線の一つであり、具体的な画法は以下の通りである:1、任意に正三角形を描き、各辺を3等分する.2、三等分した一辺の真ん中の一段を辺として外に正三角形を作り、この「真ん中の一段」を拭き取る.3、上記の2つのステップを繰り返して、より小さな三角形を描きます.4、無限になるまで繰り返し、描いた曲線をコハ曲線と呼ぶ.
小結:フラクタルはとても面白いもので、自分の奇妙な想像によって多くのとてもきれいな図形を描くことができて、すでに存在するだけではなくて、あなたは自分の図形を創造することができます!