本日の怪物曲線 2016/6/18

27
本日の怪物曲線

Transcript of 本日の怪物曲線 2016/6/18

Page 1: 本日の怪物曲線 2016/6/18

本日の怪物曲線

Page 2: 本日の怪物曲線 2016/6/18

自己紹介

Twitter:ヘキソミノ @Hexomino

ネットワークエンジニア外資系メーカ勤務シェル芸勉強会参加歴 2年強

Page 3: 本日の怪物曲線 2016/6/18

前回の伝説のLTおさらい

•鳥海師匠による eval黒魔術

• evalコマンド多段評価によるフラクタル曲線デモ

•ドラゴン曲線

•ヒルベルト曲線

Page 4: 本日の怪物曲線 2016/6/18

俺もやってみたい

Page 5: 本日の怪物曲線 2016/6/18

まずは前回の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

Page 6: 本日の怪物曲線 2016/6/18

まずは前回のLTの解析

•鳥海師匠によるヒルベルト曲線

l='L${r}FR${l}F${l}RF${r}L'r='R${l}FL${r}F${r}LF${l}R'

Page 7: 本日の怪物曲線 2016/6/18

お題:シェルピンスキー曲線

Page 8: 本日の怪物曲線 2016/6/18

シェルピンスキー曲線

• 鳥海師匠によるeval黒魔術を継承

• 平面を充填する閉曲線

c='N${c}FR${c}LLLFFL${c}FR${c}'L: 左へ45度回転R: 右へ90度回転

Page 9: 本日の怪物曲線 2016/6/18

鳥海流でやってみた

Page 10: 本日の怪物曲線 2016/6/18

シェルピンスキー曲線シェル芸

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

Page 11: 本日の怪物曲線 2016/6/18

ドラゴン曲線ヒルベルト曲線

シェルピンスキー曲線・・・

他にも空間充填曲線はあるか?

Page 12: 本日の怪物曲線 2016/6/18

あった

Page 13: 本日の怪物曲線 2016/6/18

ゴスパーの流蛇

1次のゴスパー流蛇

Page 14: 本日の怪物曲線 2016/6/18

ゴスパーの流蛇• ゴスパー曲線の写像

• A(正順)à SALBLLBRARRAARBL• B(逆順)à SRALBBLLBLARRARB• L:60度左回転• R:60度右回転

• S:θ (tanθ =√3/5)右回転

鳥海流 eval黒魔術は断念 L

Page 15: 本日の怪物曲線 2016/6/18

ゴスパーの流蛇シェル芸

• 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

Page 16: 本日の怪物曲線 2016/6/18

2次のゴスパーの流蛇

Page 17: 本日の怪物曲線 2016/6/18

3次のゴスパーの流蛇

Page 18: 本日の怪物曲線 2016/6/18

4次のゴスパーの流蛇

Page 19: 本日の怪物曲線 2016/6/18

5次のゴスパーの流蛇

Page 20: 本日の怪物曲線 2016/6/18

さらに

Page 21: 本日の怪物曲線 2016/6/18

拡張ゴスパー怪物曲線• グーグル先生に聞いてみた

•ゴスパーの流蛇は N=7•「ふつう思うのは、『N=7と言っているのだから、これだけではないでしょう』と」

• 参考:IPX社員によるブログ 鹿又さんhttp://ipx.hatenablog.com/entry/2015/09/23/185322

• ゴスパーの怪物曲線は N=3n+1として一般化

Page 22: 本日の怪物曲線 2016/6/18

ゴスパーの怪物曲線 (N=13)

A (正順) à LLBRARRALBLLBRAARRARBLARBLLBLARB (逆順) à LBRARRALBRALBLLBBLARRARBLLBLARR

N=13 ゴスパー1次曲線 N=13 ゴスパー2次曲線

Page 23: 本日の怪物曲線 2016/6/18

ゴスパーの怪物曲線 (N=37)

A àALBRAARBLLBLARBLLBLARBRALBLLBRARRALBRARRALBRAARBLLBLALBBRARRAALBRARRALBBLARBLB à RALBRAARBLLBLARBBLLBLAARBRARRALBBLARBLLBLARBLLBLARRARBLALBRARRALBRARRALBBLARB

N=37 ゴスパー1次曲線 N=37 ゴスパー2次曲線

Page 24: 本日の怪物曲線 2016/6/18

ゴスパーの怪物曲線 (N=19)

A à AALBBLALBBLLBLARRARBRAARBRAAARBBLB à RAALBBBLALBBLALBLLBRARRAARBRAARBB

N=19 ゴスパー1次曲線

ラーメンみたいなやつ

Page 25: 本日の怪物曲線 2016/6/18

ゴスパーの怪物曲線 (N=19,2次)

Page 26: 本日の怪物曲線 2016/6/18

ゴスパーの怪物曲線 (N=19,3次)

Page 27: 本日の怪物曲線 2016/6/18

ゴスパーの怪物曲線 (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