クリスマスツリー



@tree1 Atree2 Btree3 モチーフsample

モチーフ画像を参考にクリスマスツリー(モミの木)の画像を作成した。

テキストボックスに数値を入力することによって木の高さが変化する。
また、それに伴い繰り返し描画する木の数も変化する。

@まず、木1つの半分の画像を描いた。色は緑色にして、幹の部分のみ茶色にした。
A@を反転したものを加えて木の形になるようにした。
BAを平行移動させ、繰り返し模様にした。

組み合わせ方を工夫して、上下逆さまにしても同じようにツリーの絵に見えるようにした。


アルゴリズムとプログラムの説明

・まず以下のような配列を用意。
Point[][] p = new Point[9][2];
・その中に木の半分を表すの座標を指定。
p[0][0] = new Point((int)(7*size/6),0);
p[1][0] = new Point((int)(size/2),size);
p[2][0] = new Point((int)(5*size)/6,size);
    ・
    ・
    ・
p[8][0] = new Point((int)(7*size)/6,4*size);


・次に、これを反転し木の形を形成。
for (i = 0; i < 9; i++) {
	p[i][1] = new Point (-(p[i][0].x - (int)(7*size/6)) + (int)(7*size/6), p[i][0].y);
}


・最後にコレをX軸方向、Y軸方向に平行移動して繰り返し模様を描画。
 for(x=0; x<800; x+=14*size/6){
	for(y=0;y<800;y+=4*size){
		for (j=0; j<2; j++) {
			for (i=1; i<9; i++) {
				if (i == 7) {
					g.setColor(Color.orange);
				} else{
					g.setColor(Color.green);
				}
				g.drawLine(p[i-1][j].x+(int)x, p[i-1][j].y+(int)y , p[i][j].x+(int)x, p[i][j].y+(int)y);
			}
		}
	}
}


・ソースは、こちら
まとめ・感想

クリスマスツリーは時期的にもよく、形が捉えやすいのでモチーフとした。
繰り返し模様ということで、なるべく意味のある繰り返しにしようと考えて制作した。
逆から見ても同じクリスマスツリーの模様に見えるように工夫した。
なるべく無駄を無くすために、上向きのツリーのみを描画し、
その結果として下向きのツリーも描かれて見えるようにした。
(つまり、下向きのツリーはプログラムでわざわざ描画していない)