Ex12_5



/*-----------------------
  ex12_5.java
  色々描く:樹木曲線
 ------------------------*/
package jp_bunkyo;

import java.applet.*;
import java.awt.*;

public class Ex12_5 extends Applet {
	Graphics g;
	int n;
	double x, y, lengt, angle, scale, brnch;

	public void init() {
		n = 8;		// 樹木曲線の深さ
		x = 200.0;	// 初期 x座標
		y = 0.0;	// 初期 y座標
		angle = Math.PI/2;	// 樹木:木の伸縮方向
		scale = 1.4;		// 樹木:枝伸縮率
		lengt = 80.0;			// 樹木:枝長
		brnch = Math.PI/6;	// 樹木:枝分岐角度
	}

	public void paint(Graphics g) {
		draw_tree(n, x, y, lengt, angle);
	}

	private void draw_tree(int n, double lx, double ly, double len, double agl) {
		if (n == 0) {
			return;
		}
		double dx = len * Math.cos(agl);
		double dy = len * Math.sin(agl);

		g = getGraphics();
		g.drawLine((int)lx, 300-(int)ly, (int)(lx+dx), 300-(int)(ly+dy));
		g.dispose();

		lx += dx; ly += dy;
		draw_tree(n-1, lx, ly, len/scale, agl-brnch);
		draw_tree(n-1, lx, ly, len/scale, agl+brnch);
	}
}