第1章 1.1 フラクタルとは 【プログラム例なし】 1.2 フラクタル図形の作り方 【プログラム例なし】 1.3 簡単なフラクタル描画の例 【リスト1-1】  01 import turtle  02 #■コッホ曲線をTurtleグラフィックスで描く  03 def KochCurve(t,N,L):  04 if N<=0: t.forward(L)  05 else:  06 NN=N-1;LL=L/3; KochCurve(t,NN,LL)  07 t.left(60) ; KochCurve(t,NN,LL)  08 t.right(120) ; KochCurve(t,NN,LL)  09 t.left(60) ; KochCurve(t,NN,LL)  10 #■メイン処理  11 t=turtle.Pen()  12 t.screen.title("Koch Curve used Turtle graphics")  13 t.speed(0) #タートル移動を速くする  14 t.screen.tracer(100000,0) #描く順序を見たいとき第1引数を小さくする  15 t.hideturtle() #タートルを見えなくする  16 t.up(); t.goto(-300,100); t.down() #描画開始位置に移動  17 t.width(2); t.color('blue') #線幅とカラーを設定  18 KochCurve(t,5,420) #コッホ曲線描画開始  19 t.screen.tracer(1,0)  20 t.screen.mainloop()   【リスト1-2】  01 import turtle  02 #■コッホ曲線をTurtleグラフィックスで描く  03 NMAX=5  04 def KochCurve(t,N,L):  05 global NMAX  06 if N>=NMAX: t.forward(L)  07 else:  08 NN=N+1;LL=L/3; KochCurve(t,NN,LL)  09 t.left(60) ; KochCurve(t,NN,LL)  10 t.right(120) ; KochCurve(t,NN,LL)  11 t.left(60) ; KochCurve(t,NN,LL)  12 #■メイン処理  13 t=turtle.Pen()  14 t.screen.title("Koch Curve used Turtle graphics")  15 t.speed(0) #タートル移動を速くする  16 t.screen.tracer(100000,0) #描く順序を見たいとき第1引数を小さくする  17 t.hideturtle() #タートルを見えなくする  18 t.up(); t.goto(-300,100); t.down() #描画開始位置に移動  19 t.width(2); t.color('blue') #線幅とカラーを設定  20 KochCurve(t,0,420) #コッホ曲線描画開始  21 t.screen.tracer(1,0)  22 t.screen.mainloop()   【リスト1-3】以下のプログラムをtkinterTurtle.pyとして保存します。  01 from tkinter import *  02 import math  03 #  04 # ■相対描画のためのRelativeDrawクラス定義  05 #   06 # 変数名 = RelativeDraw(canvas, startX, startY,scaleX, scaleY,  07 # lineWidth,color)  08 #  09 # canvas : キャンバス  10 # startX, startY : 表示開始位置  11 # scaleX, scaleY : 表示スケール(上下または左右を逆転するとき負)  12 # lineWidth : 描画する直線の太さ  13 # color : カラーを文字列で指定(例 : 'red', '#00FFFF')  14 #  15 class RelativeDraw:  16 #■ コンストラクタ  17 def __init__(self, canvas,startX, startY,scaleX, scaleY,  18 lineWidth, color):  19 self.canvas=canvas  20 self.X0=startX; self.Y0=startY  21 self.SX=scaleX; self.SY=scaleY  22 self.lineWidth=lineWidth  23 self.color=color  24 self.goto(0,0)  25 #■ XY座標設定  26 def goto(self,x,y): self.x=x; self.y=y  29 #■ スクリーン座標への変換  30 def screenX(self, X): return self.X0 + self.SX * X  32 def screenY(self, Y): return self.Y0 + self.SY * Y  33 class TurtleGraph(RelativeDraw):  34 #■ コンストラクタ  35 def __init__(self, canvas,startX, startY,  36 scaleX, scaleY, lineWidth,color):  37 super().__init__(self,canvas,startX, startY,scaleX, scaleY,  38 lineWidth,color)  39 self.setAng(0)  40 #■ 角度設定  41 def setAng(self,th): self.th=th  42 #■ 向きの変更(右回転は負の値で指定)  43 def turn(self,th): self.th=self.th+th  44 #■ 前に進む(後退は負の値で指定)  45 def forward(self,L):  46 TH=self.th*math.pi/180  47 X=self.x+L*math.cos(TH); Y=self.y+L*math.sin(TH)  49 self.canvas.create_line(self.screenX(self.x),  50 self.screenY(self.y),  51 self.screenX(X), self.screenY(Y),  52 width = self.lineWidth, fill = self.color)  53 self.x=X; self.y=Y 【リスト1-4】tkinterTurtle.pyを使ったコッホ曲線描画  01 from tkinter import *  02 from tkinterTurtle import *  03 #■コッホ曲線のクラス定義(turtleGraph, RelativeDrawクラスからの継承)  04 class Koch(TurtleGraph):  05 def curve(self,N,L):  06 if N<=0: self.forward(L)  07 else:  08 NN=N-1; LL=L/3  09 self.curve(NN,LL)  10 self.turn(60) ; self.curve(NN,LL)  11 self.turn(-120); self.curve(NN,LL)  12 self.turn(60) ; self.curve(NN,LL)  13 #■ tkinter,Canvas共通処理  14 def initTk(Title):  15 tk=Tk(); tk.title(Title)  16 return tk  17 def initCanvas(W,H):  18 canvas=Canvas(tk,width=W,height=H)  19 canvas.pack()  20 return canvas  21 #■ メイン処理  22 tk=initTk("Koch Curve used tkinter")  23 canvas=initCanvas(600,300)  24 koch=Koch(canvas, 50, 200, 1, -1, 2, 'blue')  25 koch.curve(5,420)  26 tk.mainloop()   【リスト1-5】(関数呼び出し部分以外は【リスト1-1】と同じ)  ・  ・(前略)  ・  KochCurve(t,5,420) #コッホ曲線描画開始  t.right(120);KochCurve(t,5,420)  t.right(120);KochCurve(t,5,420)  ・  ・(後略)  ・