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

Post on 15-Apr-2017

3.257 views 1 download

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