花の数学モデル

  1. 花のモデル
    1. 基本モデル
      花の花弁(2次元)を、角度に対する長さを三角関数で与えて、モデル化します。
      基本式は r=d*abs(sin3(θ)) です。θが0から2πまで変化しますと、r(長さ)は6回0からdまで変化します。これを角度に対する長さとして描画すると、次のようになります。 ここで、absは絶対値演算です。
    2. 組み合わせ
      一般にr=d*abs(sin(n*θ)) とすると、nの数で花弁の枚数が変化します。この基本式に、3倍、5倍の枚数を重ねあわせると、いろいろな形状に変化します。フーリエ級数の応用です。
       r=abs(a*sin(n*θ) + b*sin(3*n*θ) + c*sin(5*n*θ)
      下の例は、n=5、a=70、b=17、c=2 の例です。
  2. プロジェクト
    1. 目的
      各種の組み合わせを調べるため、n,b,cの値を変えながら表示するプログラムを作成します。
    2. レイアウト
      nを文字入力、b,cをスライダで設定します。
    3. プログラム
      1. paint()
        paint()でパラメータを受け取り、表示します。
          public void paint(Graphics g){
            int ca=70,cb=10,cc=7;
            double t,at,r,ua;
            int nNum=5;
            int xc=150,yc=120;
            int xp,yp;
            cb=scrollbar1.getValue();
            cc=scrollbar2.getValue();
            nNum=Integer.parseInt(textField1.getText());
           xp=xc;yp=yc;
            int xn,yn,it;
            for(it=0;it<100;it++){
              t=it/100.0;
              at=2*3.1415*t;ua=nNum*at;
              r=Math.abs(ca*Math.sin(ua)+cb*Math.sin(3*ua)+cc*Math.sin(5*ua));//長さ
              xn=xc+(int)(r*Math.cos(at));//x,y座標に戻す
              yn=yc+(int)(r*Math.sin(at));
              g.drawLine(xp,yp,xn,yn);
              xp=xn;yp=yn;
              label1.setText("ca="+ca+" cb="+cb+" cc="+cc);
         
              }
           }
        
  3. 実行


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