1 public class Tree extends Turtle public void
タートルグラフィクスによる木: 1 public class Tree extends Turtle { public void tree 1(int length){ fd(length/3); //幹を描く lt(30); //左を向く tree 0(2*length/3); //2/3の高さの枝を描く rt(60); //右を向く tree 0(2*length/3); //2/3の高さの枝を描く lt(30); //正面を向き直す bk(length/3); //元の位置に戻る } public void tree 0(int length){ fd(length); //枝を描く bk(length); //元の位置に戻る } } m. tree 1(200); 10 計算機プログラミングI (増原) 2003年度
タートルグラフィクスによる木: 2 public class Tree extends Turtle { public void tree 2(int length){ fd(length/3); //幹を描く lt(30); //左を向く tree 1(2*length/3); rt(60); //2/3の高さの枝を描く //右を向く tree 1(2*length/3); //2/3の高さの枝を描く lt(30); //正面を向き直す bk(length/3); //元の位置に戻る } public void tree 1(int length){ m. tree 1(200); fd(length/3); //幹を描く lt(30); //左を向く tree 0(2*length/3); rt(60); //2/3の高さの枝を描く //右を向く tree 0(2*length/3); //2/3の高さの枝を描く lt(30); //正面を向き直す bk(length/3); //元の位置に戻る } public void tree 0(int length){ fd(length); bk(length); //枝を描く //元の位置に戻る m. tree 2(200); } } 11 計算機プログラミングI (増原) 2003年度
タートルグラフィクスによる木: 3 public class Tree extends Turtle { public void tree 3(int length){ fd(length/3); //幹を描く lt(30); //左を向く tree 2(2*length/3); rt(60); //2/3の高さの枝を描く //右を向く tree 2(2*length/3); //2/3の高さの枝を描く lt(30); //正面を向き直す bk(length/3); //元の位置に戻る } public void tree 2(int length){ fd(length/3); lt(30); //幹を描く //左を向く tree 1(2*length/3); rt(60); //2/3の高さの枝を描く //右を向く tree 1(2*length/3); lt(30); bk(length/3); m. tree 2(200); //2/3の高さの枝を描く //正面を向き直す //元の位置に戻る } public void tree 1(int length){ fd(length/3); lt(30); //幹を描く //左を向く tree 0(2*length/3); rt(60); tree 0(2*length/3); lt(30); bk(length/3); //正面を向き直す //元の位置に戻る } public void //2/3の高さの枝を描く //右を向く tree 0(int length){ //2/3の高さの枝を描く m. tree 3(200); 12 計算機プログラミングI (増原) 2003年度
タートルグラフィクスによる木 プログラムの全体像 public void tree 4(int length){ fd(length/3); lt(30); tree 3(2*length/3); rt(60); tree 3(2*length/3); lt(30); bk(length/3); } public void tree 3(int length){ fd(length/3); lt(30); tree 2(2*length/3); rt(60); tree 2(2*length/3); lt(30); bk(length/3); } public void tree 2(int length){ fd(length/3); lt(30); tree 1(2*length/3); rt(60); tree 1(2*length/3); lt(30); bk(length/3); } よく見ると、tree 1~tree 4はほとんど同じ! 違いは treen-1 を呼び出していること tree 0 は全く違う public void tree 1(int length){ fd(length/3); lt(30); tree 0(2*length/3); rt(60); tree 0(2*length/3); lt(30); bk(length/3); } public void tree 0(int length){ fd(length); //枝を描く bk(length); } } 14 計算機プログラミングI (増原) 2003年度
タートルグラフィクスによる木 再帰 public void tree 4(int length){ fd(length/3); lt(30); tree 3(2*length/3); rt(60); tree 3(2*length/3); lt(30); bk(length/3); } public void tree 3(int length){ fd(length/3); lt(30); tree 2(2*length/3); rt(60); tree 2(2*length/3); lt(30); bk(length/3); } よく見ると、tree 1~tree 4は ほとんど同じ! ならば、1つのメソッドにして 自分で自分を呼び出そう! = 再帰 public void tree 2(int length){ fd(length/3); lt(30); tree 1(2*length/3); rt(60); tree 1(2*length/3); lt(30); bk(length/3); } public void tree(int length){ fd(length/3); lt(30); tree(2*length/3); rt(60); tree(2*length/3); lt(30); bk(length/3); } public void tree 1(int length){ fd(length/3); lt(30); tree 0(2*length/3); rt(60); tree 0(2*length/3); lt(30); bk(length/3); } public void tree 0(int length){ fd(length); //枝を描く bk(length); } } 15 計算機プログラミングI (増原) 2003年度
リスト構造: クラス定義 public class Linked. Turtle extends Turtle { //数珠つなぎタートル Linked. Turtle next; //次のタートル public Linked. Turtle(int x, int y, int angle, Linked. Turtle next) { super(x, y, angle); this. next = next; } 自分自身の定義を使用 } →再帰的なデータ構造 next Linked. Turtle null 34 計算機プログラミングI (増原) 2003年度
リスト構造の操作: リストを作る Linked. Turtle l = null; l = new Linked. Turtle(x, y, 0, l); l next Linked. Turtle null 37 計算機プログラミングI (増原) 2003年度
リスト構造の操作: リストを作る Linked. Turtle l = null; l = new Linked. Turtle(x, y, 0, l); next Linked. Turtle l next Linked. Turtle null 38 計算機プログラミングI (増原) 2003年度
リスト構造の操作: リストを作る Linked. Turtle l = null; l = new Linked. Turtle(x, y, 0, l); next Linked. Turtle l next Linked. Turtle null 39 計算機プログラミングI (増原) 2003年度
色々なフラクタル図形 http: //www. seanet. com/~garyteachout/fill. html http: //coco. ccu. uniovi. es/malva/sketchbook/lssketchbook/examples/fractal. htm Copyright © 2002 by Hidehiko Masuhara 52 計算機プログラミングI (増原) 2003年度
- Slides: 53