本日の怪物曲線 2016/6/18
-
Upload
hexomino-hexomino -
Category
Science
-
view
3.257 -
download
1
Transcript of 本日の怪物曲線 2016/6/18
本日の怪物曲線
自己紹介
Twitter:ヘキソミノ @Hexomino
ネットワークエンジニア外資系メーカ勤務シェル芸勉強会参加歴 2年強
前回の伝説のLTおさらい
•鳥海師匠による eval黒魔術
• evalコマンド多段評価によるフラクタル曲線デモ
•ドラゴン曲線
•ヒルベルト曲線
俺もやってみたい
まずは前回のLTの解析
•鳥海師匠による eval黒魔術•ヒルベルト曲線l='L${r}FR${l}F${l}RF${r}L' r='R${l}FL${r}F${r}LF${l}R' eval eval eval eval eval eval l= r= eval echo '$l' | { read a; b=${a%%F*}; echo "from turtle import *;speed(0);pensize(2);ms=min(screensize())*0.8;l=2*ms/(2**${#b}-1);up();setpos(-ms,-ms);down();${a}done()"; } | sed 's/L/lt(90);/g;s/R/rt(90);/g;s/F/fd(l);/g' | python
まずは前回のLTの解析
•鳥海師匠によるヒルベルト曲線
l='L${r}FR${l}F${l}RF${r}L'r='R${l}FL${r}F${r}LF${l}R'
お題:シェルピンスキー曲線
シェルピンスキー曲線
• 鳥海師匠によるeval黒魔術を継承
• 平面を充填する閉曲線
c='N${c}FR${c}LLLFFL${c}FR${c}'L: 左へ45度回転R: 右へ90度回転
鳥海流でやってみた
シェルピンスキー曲線シェル芸
c='N${c}FR${c}LLLFFL${c}FR${c}' eval eval eval c= eval echo '$c' | { read a; b=${a%%F*}; echo "from turtle import *;speed(0);pensize(2);ms=min(screensize())*0.9;l=ms/(2**${#b});up();setpos(-ms+l/2,-ms+l);down();L${a}FR${a}FR${a}FR${a}FR done()"; } | sed's/N//g;s/RLL//g;s/L/lt(45);/g;s/R/rt(90);/g;s/FF/fd(l);/g;s:F:fd(l/sqrt(2));:g' | python
ドラゴン曲線ヒルベルト曲線
シェルピンスキー曲線・・・
他にも空間充填曲線はあるか?
あった
ゴスパーの流蛇
1次のゴスパー流蛇
ゴスパーの流蛇• ゴスパー曲線の写像
• A(正順)à SALBLLBRARRAARBL• B(逆順)à SRALBBLLBLARRARB• L:60度左回転• R:60度右回転
• S:θ (tanθ =√3/5)右回転
鳥海流 eval黒魔術は断念 L
ゴスパーの流蛇シェル芸
• sed +AWK+Pythonでやってみた
echo xx | sed "s:.:| sed's/^/S/;y/AB/CD/;s/C/ALBLLBRARRAARBL/g;s/D/RALBBLLBLARRARB/g':g;s:^:echo A :;" | sh | awk'{match($0,/^S*/);deg=RLENGTH;print "from turtle import *;speed(0);pensize(2);ms=min(screensize())*.95;l=ms*sqrt(3)/(sqrt(7)**" deg ");up();setpos(-ms*sqrt(3)/2,-ms/2);down();rt(atan(sqrt(3)/5)*" deg "*180/pi);" $0 "done();"}' | sed's/S//g;s/LR//g;s/L/lt(60);/g;s/R/rt(60);/g;s/[AB]/fd(l);/g;' | python
2次のゴスパーの流蛇
3次のゴスパーの流蛇
4次のゴスパーの流蛇
5次のゴスパーの流蛇
さらに
拡張ゴスパー怪物曲線• グーグル先生に聞いてみた
•ゴスパーの流蛇は N=7•「ふつう思うのは、『N=7と言っているのだから、これだけではないでしょう』と」
• 参考:IPX社員によるブログ 鹿又さんhttp://ipx.hatenablog.com/entry/2015/09/23/185322
• ゴスパーの怪物曲線は N=3n+1として一般化
ゴスパーの怪物曲線 (N=13)
A (正順) à LLBRARRALBLLBRAARRARBLARBLLBLARB (逆順) à LBRARRALBRALBLLBBLARRARBLLBLARR
N=13 ゴスパー1次曲線 N=13 ゴスパー2次曲線
ゴスパーの怪物曲線 (N=37)
A àALBRAARBLLBLARBLLBLARBRALBLLBRARRALBRARRALBRAARBLLBLALBBRARRAALBRARRALBBLARBLB à RALBRAARBLLBLARBBLLBLAARBRARRALBBLARBLLBLARBLLBLARRARBLALBRARRALBRARRALBBLARB
N=37 ゴスパー1次曲線 N=37 ゴスパー2次曲線
ゴスパーの怪物曲線 (N=19)
A à AALBBLALBBLLBLARRARBRAARBRAAARBBLB à RAALBBBLALBBLALBLLBRARRAARBRAARBB
N=19 ゴスパー1次曲線
ラーメンみたいなやつ
ゴスパーの怪物曲線 (N=19,2次)
ゴスパーの怪物曲線 (N=19,3次)
ゴスパーの怪物曲線 (N=19)
拡張ゴスパーラーメン曲線デモ
echo xx | sed "s:.:| sed's/^/S/;y/AB/CD/;s/C/AALBBLALBBLLBLARRARBRAARBRAAARBBL/g;s/D/RAALBBBLALBBLALBLLBRARRAARBRAARBB/g':g;s:^:echo A :;" | sh | awk'{match($0,/^S*/);deg=RLENGTH;print "from turtle import *;speed(0);pensize(2);ms=min(screensize())*.95;l=ms*sqrt(3)/(sqrt(19)**" deg ");up();setpos(-ms*sqrt(3)/2,-ms/2);down();rt(atan(sqrt(3)/4)*" deg "*180/pi);" $0 "done();"}' | sed 's/S//g;s/LR//g;s/L/lt(60);/g;s/R/rt(60);/g;s/[AB]/fd(l);/g;' | python