import java.awt.*; import javax.swing.*; import java.util.ArrayList; import static java.lang.Math.*; /* */ public class Tree extends JApplet { ArrayList data = new ArrayList(); public void drawTree(int d, double x, double y, double r, double t) { /* d --- 再帰呼出しの深さ */ /* (x, y) --- 枝の根元の座標 */ /* r --- 枝の長さ */ /* t --- 枝の角度(ラジアン) */ double r1; if (d==0) return; data.add(new int[] {(int)x, (int)y, (int)(x+r*cos(t)), (int)(y+r*sin(t))}); r1 = r; drawTree(d-1, x+r1*cos(t), y+r1*sin(t), 0.5*r, t+0.2); r1 = 0.55*r; drawTree(d-1, x+r1*cos(t), y+r1*sin(t), 0.5*r, t+1.25); r1 = 0.45*r; drawTree(d-1, x+r1*cos(t), y+r1*sin(t), 0.5*r, t-1.3); } @Override public void init() { drawTree(6, 128, 255, 128, -PI/2); } @Override public void paint(Graphics g) { g.setColor(Color.GREEN); for(int[] pts : data) { g.drawLine(pts[0], pts[1], pts[2], pts[3]); System.out.printf("(%d, %d)--(%d, %d)%n", pts[0], pts[1], pts[2], pts[3]); } } }