ジバニャン方程式をついに発見した
https://t.co/6ADdU4LGyw pic.twitter.com/CEtNYcb80x
— Akiya Mizukoshi (@Akiyah) 2014, 11月 12
輪郭抽出が手抜きでちょっとあれですが…^^;
| jibanyanEquation form size | jibanyanEquation := [:x :y | { { {1-(x/108 raisedTo: 2)-(y/94 raisedTo: 2). y} min. { 1-(x abs-119/103 raisedTo: 2)-(y-56/86 raisedTo: 2). 1-(x abs-15/77 raisedTo: 2)-(y-119/100 raisedTo: 2)} min. 1-(x abs-42/66 raisedTo: 2)-(y/55 raisedTo: 2). {55+y. 51-x abs. y negated} min} max. 3*(y-100) abs-(2*(x-75)) } min * { { { {1-(x/106 raisedTo: 2)-(y/92 raisedTo: 2). y} min. { 1-(x abs-119/101 raisedTo: 2)-(y-56/84 raisedTo: 2). (x abs-99/40 raisedTo: 2)+(y-54/86 raisedTo: 2)-1. 92-x abs} min. 1-(x abs-42/64 raisedTo: 2)-(y/53 raisedTo: 2)} max. { (x abs-52/26 raisedTo: 2)+(y+28/26 raisedTo: 2)-1. (x abs-51/13 raisedTo: 2)+(y/13 raisedTo: 2)-1. {x abs-51. y} max} min} min. ((x/51+(10/51*((y abs/61.2 raisedTo: 1.2)*Float pi*7/2) sin)) abs raisedTo: 2/3) +(y abs/61.2 raisedTo: 2/3)-1 } min * { 1-(x/32 raisedTo: 2)-(y+30/32 raisedTo: 2). 1-(x abs+5/22 raisedTo: 2)-(y-18/22 raisedTo: 2) } min * { 1-(x abs-18/20 raisedTo: 2)-(y+10/20 raisedTo: 2). (x abs-20/22 raisedTo: 2)+(y+7/20 raisedTo: 2)-1 } min * (1-(x abs-51/11 raisedTo: 2)-(y/11 raisedTo: 2)) ]. size := 300. form := Form extent: size asPoint. (0 to: size) - (size // 2) asDigitsToPower: 2 do: [:xy | | pos | (pos := xy first @ xy second) asString displayAt: 100 asPoint. form pixelValueAt: size // 2 + pos put: ((jibanyanEquation value: pos x value: pos y) >=0) asBit ]. form := form flipVertically asFormOfDepth: 8. {size // -2. 0@ -75. 0@0. -50@0. 50@0. 0@17} do: [:pos | form shapeBorder: Color red width: 1 interiorPoint: pos + form center sharpCorners: false internal: true]. form replaceColor: Color black withColor: Color white. form replaceColor: Color red withColor: Color black. form asMorph openInHand