ペンローズタイル
ペンローズタイルを並べる を参考にして PostScript でペンローズタイルを描いてみた。カイト 1 個からスタートして収縮させていった時の様子を表したのが上だか右だかにある図です。
以下はソース。
%!PS /a 100 def /phi-1 5 sqrt 1 sub 2 div def /b a phi-1 mul def /gexec{ gsave exec grestore }def /polar_to_orthogonal{ % r theta -- x y 2 copy cos mul 3 1 roll sin mul }def /kite{ dup 0 eq{ pop drawkite }{ 1 sub dup{ a 36 polar_to_orthogonal translate -108 rotate phi-1 dup scale kite }gexec dup{ a -36 polar_to_orthogonal translate 108 rotate phi-1 dup scale kite }gexec dup{ 36 rotate phi-1 dup scale dart }gexec dup{ -36 rotate phi-1 dup scale dart }gexec pop }ifelse }def /dart{ dup 0 eq{ pop drawdart }{ 1 sub dup{ phi-1 dup scale kite }gexec dup{ -144 rotate a neg 0 translate phi-1 dup scale dart }gexec dup{ 144 rotate a neg 0 translate phi-1 dup scale dart }gexec pop }ifelse }def /drawkite{ { newpath 0 0 moveto a 36 polar_to_orthogonal lineto a 0 lineto a -36 polar_to_orthogonal lineto closepath stroke }gexec }def /drawdart{ { newpath 0 0 moveto a 36 polar_to_orthogonal lineto b 0 lineto a -36 polar_to_orthogonal lineto closepath stroke }gexec }def 0 1 6{ 30 75 translate kite % dart showpage }for
ダート 1 個からスタートすると、右のようになります。