このアプレットではバラをモチーフとして、これを数式で表すためにバラ曲線と呼ばれる数式を使いました。
ここでモチーフとなるバラの画像をいくつか紹介します。
このアプレットを用いることで上のような花の模様を作成することができます。
バラ曲線には、「分割数」「花びらの数」「花の大きさ」「変化値」を与えることができます。
「分割数」・・・0〜360の整数値を指定。値が小さいほど角ばった図形が表示されます。
「花びらの数」・・・0以上の整数を指定。指定された値nが偶数の場合は2×n枚、奇数の場合はn枚の花びらができます。
「花の大きさ」・・・0以上の整数を指定。花の大きさを変えることができます。
「変化値」・・・任意の実数値を指定します。基本は0ですが、この値を変えることでバラ曲線に一定の変化を与えることができます。
変化値を0以外にした場合、花びらの数や花の大きさは変化してしまうので注意が必要です。
public void paint(Graphics g) { int i, j; int radio = size; for (i = 0; i < n + 1; i++) { double ang = 2.0 * Math.PI * i / (n);//分割数nで割る p[i] = new Point( (int) (radio * (henka + Math.cos(hana * ang)) * Math.cos(ang)), (int) (radio * (henka + Math.cos(hana * ang)) * Math.sin(ang))); }上のプログラムでは、バラ曲線のアルゴリズムを用いてpという配列の要素に座標を記録しています。
int x, y; for(x=100;x<800;x+=100){ for(y=100;y<800;y+=100){ for (i = 1; i < n + 1; i++) { if (i < n / 6) { g.setColor(Color.orange); } else if (i >= n / 6 && i < (n * 2) / 6) { g.setColor(Color.yellow); } else if (i >= (n * 2) / 6 && i < (n * 3) / 6) { g.setColor(Color.green); } else if (i >= (n * 3) / 6 && i < (n * 4) / 6) { g.setColor(Color.pink); } else if (i >= (n * 4) / 6 && i < (n * 5) / 6) { g.setColor(Color.red); } else if (i >= (n * 5) / 6) { g.setColor(Color.magenta); } g.drawLine(p[i - 1].x + x, p[i - 1].y+y , p[i].x +x, p[i].y+y); } } } }次のプログラムでは、配列p[i-1]に格納されている座標から次の座標p[i]に向かって線を描画しています。