SVX日記

2004|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|09|10|11|12|
2024|01|02|03|04|05|06|07|08|09|10|11|

2017-12-07(Thu) タートルグラフィックスを実装

  先日に引き続き、ちょっとした用途のため、自製グラフィックライブラリにタートルグラフィックスの関数を追加することにした。習作として、フラクタル図形を描画するプログラムも書いてみる。やり始めたら極めてアッサリと、併せて数時間でできてしまった。

  まずは、12次のC曲線。

  画像の説明

 def c_curve(win, n, l)
     unless(n == 0)
         win.tLeft(45)
         c_curve(win, n - 1, l)
         win.tRight(90)
         c_curve(win, n - 1, l)
         win.tLeft(45)
     else
         win.tForward(l)
     end
 end
 
 win.tHome
 win.tRight(90)
 c_curve(win, 12, 4)

  次に、12次のドラゴン曲線。

  画像の説明

 def r_dragon(win, n, l)
     unless(n == 0)
         win.tLeft(45)
         r_dragon(win, n - 1, l)
         win.tRight(90)
         l_dragon(win, n - 1, l)
         win.tLeft(45)
     else
         win.tForward(l)
     end
 end
 
 def l_dragon(win, n, l)
     unless(n == 0)
         win.tRight(45)
         r_dragon(win, n - 1, l)
         win.tLeft(90)
         l_dragon(win, n - 1, l)
         win.tRight(45)
     else
         win.tForward(l)
     end
 end
 
 win.tHome
 win.tRight(90)
 r_dragon(win, 12, 4)

  最後に、7次のツリー。

  画像の説明

 def tree(win, n, l)
     unless(n == 0)
         win.tSetPenWidth(n * 2)
         win.tForward(l)
         win.tRight(25)
         tree(win, n - 1, l / 1.5)
         win.tLeft(55)
         tree(win, n - 1, l / 1.3)
         win.tRight(30)
         win.tBack(l)
     else
         win.tForward(l)
         win.tBack(l)
     end
 end
 
 win.tHome
 tree(win, 7, 96)

  描画結果は、svg形式でファイル出力される。上記の図形はOperaにレンダリングさせたもの。

  CADもイイけど、こういうロジックで描画させる方が好みだわ。