{"url":"https://api.github.com/gists/8428323","forks_url":"https://api.github.com/gists/8428323/forks","commits_url":"https://api.github.com/gists/8428323/commits","id":"8428323","node_id":"MDQ6R2lzdDg0MjgzMjM=","git_pull_url":"https://gist.github.com/8428323.git","git_push_url":"https://gist.github.com/8428323.git","html_url":"https://gist.github.com/mbostock/8428323","files":{".block":{"filename":".block","type":"text/plain","language":null,"raw_url":"https://gist.githubusercontent.com/mbostock/8428323/raw/703d310b399098a243a76a50bc209167e924cfd2/.block","size":17,"truncated":false,"content":"license: gpl-3.0\n"},"README.md":{"filename":"README.md","type":"text/markdown","language":"Markdown","raw_url":"https://gist.githubusercontent.com/mbostock/8428323/raw/a19726b34c042a6a09d5179e988b6e07f9737b75/README.md","size":164,"truncated":false,"content":"A fork of the earlier [Solar Terminator](/mbostock/4597134) example, using the [Waterman butterfly projection](http://www.jasondavies.com/maps/waterman-butterfly/)."},"d3.geo.polyhedron.min.js":{"filename":"d3.geo.polyhedron.min.js","type":"text/javascript","language":"JavaScript","raw_url":"https://gist.githubusercontent.com/mbostock/8428323/raw/d73a97055b133790e73d9205b8fc32c4e5d29091/d3.geo.polyhedron.min.js","size":5451,"truncated":false,"content":"(function(){function n(r,t,o){var e,a,i=t.edges,c=i.length,u={type:\"MultiPoint\",coordinates:t.face},f=t.face.filter(function(n){return 90!==Math.abs(n[1])}),h=d3.geo.bounds({type:\"MultiPoint\",coordinates:f}),d=!1,s=-1,l=h[1][0]-h[0][0],p=180===l||360===l?[(h[0][0]+h[1][0])/2,(h[0][1]+h[1][1])/2]:d3.geo.centroid(u);if(o)for(;c>++s&&i[s]!==o;);++s;for(var v=0;c>v;++v)a=i[(v+s)%c],Array.isArray(a)?(d||(r.point((e=d3.geo.interpolate(a[0],p)(g))[0],e[1]),d=!0),r.point((e=d3.geo.interpolate(a[1],p)(g))[0],e[1])):(d=!1,a!==o&&n(r,a,t))}function r(n,r){for(var t,o,e=n.length,a=null,i=0;e>i;++i){t=n[i];for(var c=r.length;--c>=0;)if(o=r[c],t[0]===o[0]&&t[1]===o[1]){if(a)return[a,t];a=t}}}function t(n,r){var t=a(n[1],n[0]),o=a(r[1],r[0]),u=c(t,o),f=i(t)/i(o);return e([1,0,n[0][0],0,1,n[0][1]],e([f,0,0,0,f,0],e([Math.cos(u),Math.sin(u),0,-Math.sin(u),Math.cos(u),0],[1,0,-r[0][0],0,1,-r[0][1]])))}function o(n){var r=1/(n[0]*n[4]-n[1]*n[3]);return[r*n[4],-r*n[1],r*(n[1]*n[5]-n[2]*n[4]),-r*n[3],r*n[0],r*(n[2]*n[3]-n[0]*n[5])]}function e(n,r){return[n[0]*r[0]+n[1]*r[3],n[0]*r[1]+n[1]*r[4],n[0]*r[2]+n[1]*r[5]+n[2],n[3]*r[0]+n[4]*r[3],n[3]*r[1]+n[4]*r[4],n[3]*r[2]+n[4]*r[5]+n[5]]}function a(n,r){return[n[0]-r[0],n[1]-r[1]]}function i(n){return Math.sqrt(n[0]*n[0]+n[1]*n[1])}function c(n,r){return Math.atan2(n[0]*r[1]-n[1]*r[0],n[0]*r[0]+n[1]*r[1])}function u(n,r){for(var t=0,o=n.length,e=0;o>t;++t)e+=n[t]*r[t];return e}function f(n,r){return[n[1]*r[2]-n[2]*r[1],n[2]*r[0]-n[0]*r[2],n[0]*r[1]-n[1]*r[0]]}function h(n){return[Math.atan2(n[1],n[0])*m,Math.asin(Math.max(-1,Math.min(1,n[2])))*m]}function d(n){var r=n[0]*M,t=n[1]*M,o=Math.cos(t);return[o*Math.cos(r),o*Math.sin(r),Math.sin(t)]}function s(n,r){return n&&r&&n[0]===r[0]&&n[1]===r[1]}function l(n){for(var r=n.length,t=[],o=n[r-1],e=0;r>e;++e)t.push([o,o=n[e]]);return t}function p(n){return n.project.invert||n.children&&n.children.some(p)}var g=1e-6,v=Math.PI,M=v/180,m=180/v;d3.geo.polyhedron=function(a,i,c){function u(n,o){if(n.edges=l(n.face),o)if(o.face){var a=n.shared=r(n.face,o.face),i=t(a.map(o.project),a.map(n.project));n.transform=o.transform?e(o.transform,i):i;for(var c=o.edges,f=0,h=c.length;h>f;++f)s(a[0],c[f][1])&&s(a[1],c[f][0])&&(c[f]=n),s(a[0],c[f][0])&&s(a[1],c[f][1])&&(c[f]=n);for(var c=n.edges,f=0,h=c.length;h>f;++f)s(a[0],c[f][0])&&s(a[1],c[f][1])&&(c[f]=o),s(a[0],c[f][1])&&s(a[1],c[f][0])&&(c[f]=o)}else n.transform=o.transform;return n.children&&n.children.forEach(function(r){u(r,n)}),n}function f(n,r){var t,o=i(n,r),e=o.project([n*m,r*m]);return(t=o.transform)?[t[0]*e[0]+t[1]*e[1]+t[2],-(t[3]*e[0]+t[4]*e[1]+t[5])]:(e[1]=-e[1],e)}function h(n,r){var t=n.project.invert,e=n.transform,a=r;if(e&&(e=o(e),a=[e[0]*a[0]+e[1]*a[1]+e[2],e[3]*a[0]+e[4]*a[1]+e[5]]),t&&n===d(i=t(a)))return i;for(var i,c=n.children,u=0,f=c&&c.length;f>u;++u)if(i=h(c[u],r))return i}function d(n){return i(n[0]*M,n[1]*M)}c=null==c?-v/6:c,u(a,{transform:[Math.cos(c),Math.sin(c),0,-Math.sin(c),Math.cos(c),0]}),p(a)&&(f.invert=function(n,r){var t=h(a,[n,-r]);return t&&(t[0]*=M,t[1]*=M,t)});var g=d3.geo.projection(f),y=g.stream;return g.stream=function(r){var t=g.rotate(),o=y(r),e=(g.rotate([0,0]),y(r));return g.rotate(t),o.sphere=function(){e.polygonStart(),e.lineStart(),n(e,a),e.lineEnd(),e.polygonEnd()},o},g},d3.geo.polyhedron.butterfly=function(n){n=n||function(n){var r=d3.geo.centroid({type:\"MultiPoint\",coordinates:n});return d3.geo.gnomonic().scale(1).translate([0,0]).rotate([-r[0],-r[1]])};var r=d3.geo.polyhedron.octahedron.map(function(r){return{face:r,project:n(r)}});return[-1,0,0,1,0,1,4,5].forEach(function(n,t){var o=r[n];o&&(o.children||(o.children=[])).push(r[t])}),d3.geo.polyhedron(r[0],function(n,t){return r[-v/2>n?0>t?6:4:0>n?0>t?2:0:v/2>n?0>t?3:1:0>t?7:5]})},d3.geo.polyhedron.waterman=function(n){function r(n,r){var t=Math.cos(r),o=[t*Math.cos(n),t*Math.sin(n),Math.sin(r)],a=-v/2>n?0>r?6:4:0>n?0>r?2:0:v/2>n?0>r?3:1:0>r?7:5,c=e[a];return i[0>u(c[0],o)?8+3*a:0>u(c[1],o)?8+3*a+1:0>u(c[2],o)?8+3*a+2:a]}n=n||function(n){var r=6===n.length?d3.geo.centroid({type:\"MultiPoint\",coordinates:n}):n[0];return d3.geo.gnomonic().scale(1).translate([0,0]).rotate([-r[0],-r[1]])};var t=d3.geo.polyhedron.octahedron,o=t.map(function(n){for(var r,t=n.map(d),o=t.length,e=t[o-1],a=[],i=0;o>i;++i)r=t[i],a.push(h([.9486832980505138*e[0]+.31622776601683794*r[0],.9486832980505138*e[1]+.31622776601683794*r[1],.9486832980505138*e[2]+.31622776601683794*r[2]]),h([.9486832980505138*r[0]+.31622776601683794*e[0],.9486832980505138*r[1]+.31622776601683794*e[1],.9486832980505138*r[2]+.31622776601683794*e[2]])),e=r;return a}),e=[],a=[-1,0,0,1,0,1,4,5];o.forEach(function(n,r){for(var i=t[r],c=i.length,u=e[r]=[],h=0;c>h;++h)o.push([i[h],n[(2*h+2)%(2*c)],n[(2*h+1)%(2*c)]]),a.push(r),u.push(f(d(n[(2*h+2)%(2*c)]),d(n[(2*h+1)%(2*c)])))});var i=o.map(function(r){return{project:n(r),face:r}});return a.forEach(function(n,r){var t=i[n];t&&(t.children||(t.children=[])).push(i[r])}),d3.geo.polyhedron(i[0],r).center([0,45])};var y=[[0,90],[-90,0],[0,0],[90,0],[180,0],[0,-90]];d3.geo.polyhedron.octahedron=[[0,2,1],[0,3,2],[5,1,2],[5,2,3],[0,1,4],[0,4,3],[5,4,1],[5,3,4]].map(function(n){return n.map(function(n){return y[n]})});var j=Math.atan(Math.SQRT1_2)*m,E=[[0,j],[90,j],[180,j],[-90,j],[0,-j],[90,-j],[180,-j],[-90,-j]];d3.geo.polyhedron.cube=[[0,3,2,1],[0,1,5,4],[1,2,6,5],[2,3,7,6],[3,0,4,7],[4,5,6,7]].map(function(n){return n.map(function(n){return E[n]})})})();\n"},"index.html":{"filename":"index.html","type":"text/html","language":"HTML","raw_url":"https://gist.githubusercontent.com/mbostock/8428323/raw/c9079efe2aa4769dbd59c36c6d9f781bec8d6782/index.html","size":4496,"truncated":false,"content":"\n\n\n
\n\n\n\n\n"},"thumbnail.png":{"filename":"thumbnail.png","type":"image/png","language":null,"raw_url":"https://gist.githubusercontent.com/mbostock/8428323/raw/54e6c252d8ca6b2e08e3d71f52ece2f8213063d1/thumbnail.png","size":25783,"truncated":false,"content":"�PNG\r\n\u001A\n\u0000\u0000\u0000\rIHDR\u0000\u0000\u0000�\u0000\u0000\u0000x\b\u0002\u0000\u0000\u0000id\u0019�\u0000\u0000\n�iCCPicm\u0000\u0000HǕ�\u0007P��\u0016����7ZB(RBc�\u001A��**!\t!�\u0018\u0002ADDT�\u0015\\\u000B\"\"X\u0016t\u0005D���ւ�ba\u0011P�� ���.\u0016l��\u000Fy����Λ=3g�ߜ9����ޙ?\u0000�\n�P�\u0006�\u0000�.�\u0012��z0bb�\u0018��\u0000\u0002$@\u00030��ؙB���@��n\b�F�ɜ\u0016�g!��f�\u0001�B\u0010N�d��\u0011>�d\u0001[(�\u0002\u0000e�ԵWe\t�8\u0006a�\b\u0019\u0010�uh�y.���y.��\u0013\u0011�p\u001D\u0000x2�%�\u0001@B4\u0001#��CtH�\u00116\u0017p�\u0002\u0000�h�]��,\u000E�^\b\u001B����c!�������/�D�&�œ��^�\u0005ދ�)Lc������#=M���\u001A���������3�a���\u00178��\f\\`a�G�\u0002�\u0011�\u001E�_�\u0002�S#�\u00178ue��_��$X���\u0019����\u0011�\u000B��zy/�he��?3;��{��\u0005Na��,0K4^s�M�\r�>s�dNA�\u0012�^�D>�\u001En���f%G�I\u0018�\u0000�~�\u000FS�_��w��\u0010��H\u001C&9\u0007� R��ayI�\u0016�A\u0010`\u0001v\u00167'kn`ϕ��\">/9���z�1�)`�\u001A3,�-���\u001B��Eo���\u0006D�����\u0001�C1R�}���\u0000h{\n\u0000�����k���\u0000�\\\u001F[,ʞ��]W�\u0001D ��N%�\u0006h\u0001}`\u0002,�-p\u0002n�\u001B��`\u0010\u0001b�r�\u0006� \u001D��*�\u0007փ\"P\u0002v�ݠ\u0012\u001C\u0004�@\u001D8\u000EN�\u0016p\u0016\\\u0004W�\r�\u0007\u0006�\u00030\f��s0\u0005ށ\u0019\b�p\u0010\u0005�BJ�:�\u0003\u0019A��=�\u0002yC�P\u0018\u0014\u000B%@6���]�r?�\u001E
v��믿����r9I����o�|��իW\u0003(����z��))\u0004EO�6mpp0 vHn\u0018�\t�|�b\u0017A\u0010�N� \b\u001C�mڴ���_���C�gG��\u0002\u0000X�5��)))\u0015\u0015\u0015���===UUU�34Qz\u0016�0�\\>i�$��-��\u0012\u0012\u0012\u0012\u0012\u0012�N���CF\u0002�0(P�R$\u0010BZ\"iok5\u0007i\u0001 h�4H����X�X��^_\bE\b1\f\u0010\u0004I�4���ʓ-5eӦN�w�#h^\u001A�a�\u0012�\u001A\u000F]����\u0006�\u0005�22���y'N����\u000E\u000F\u000F\u001F^�7\\|��577����߆�Z\u001A\u001A\u001A\u0002\"\u001B\b�\u0004���\u001Dz{{\u0011��V���t���\u0017�l�\u0011_}�U�B�0� �*�*%%\u0005\u0000�\tb��1�w�P�\u0010\u001E��\\�2��\u0000�b��j�̙J��h4\u0016\u0016\u0016��vA\u0010P�a\u0004�8�\u001D�x<����?�8����\u0004\u0000�:\rG���T�={��5kh�\u000E\n\nB\u0013:�v��گ�\u001B�*5A\u0010<Ǻ]��`lCu0\u0004A�u�gO\nC���\b;��\u001E\u0011\u0019\u001D\bҡ}!\b��i��\u0010�WScCK��H�����Q��<�\n�\u0015�\u0019NW�!;`�T�����ɓG�\u001C�(:$$$**�l6\u0007�f84m���s֬�賈����<0,�\u0016`hwww}}���ٵk��ٳ]\u001B��\u001A\u001A\u001A\u001C\u000E��\"�@:{<�7����|�V��������L���V�#C�\u001E/{�(��p\u0015>����x���\u0012�d�ҥS�N����1c\u0006y\u000E`\u0007��h4\u001A����x�~�k����hV�\\yォ$\u0012�������\u0005do\f\u000E\u000E&&&>��#�\u0014A\u0016����d�yG�+O̘���(shD���P�\u0001\u0000<�r\u001C\u0007E��8��\u001A\u00191\u0013\u0000\u0011\u0000<::�He� �P\u0014\u0001��$IR\u0014\u0000��������l�8\u0006\u0018\u0012\u0018��u�-\f\u000B�\u0012D���ĕ,�\u001FAW\u0015C\u0000�qQ\u0014\u0004�������\u0011E�������ȑ�n�G�P���GEE��z��X��z�!!fA� ���\u0006A�].\u0017\u001A�h�ښ����Z\u001D\u000E�DBO�2�������Ysg��-((x��\u0017\u0003��hw�N'*\u0010A�8cW\u001E\"܊��(�LVZZ���v������l6\u000B�h�+�R���ҫ��p^\u0013S\u0014E�NWYYY__��s��l6��XTT����m۶����c�DQt�\\w�yg]]��f�x<\b�gǎ\u001D\b�k�&C����ا�zJ&��\\�@�\u0001�q�Ϸt坅\u0012ʬ\"bbcN��j�:.�\u0012M��`����J��n\u001F�Q�No�y\u0016\u0000�h2ј�r�R��=����]��=��\u000F֩�Ƅ�Dg���\u0018�C\b��y�G�^m؋��0N\u0014E���F��h\u0006\u0000p�������9//�eY�%����T*\f#��,0�^���W�Q���R\u0014i2\u0019SS�M&�T*?~�\u0018�\u0011k�܁|X��KJJ*++CCCQ}� \b===��{�%K��ߟ���v�\u0011�ψE\"��(��8�`�aÆիW���@\b5\u001A\r\u0018R�iQ���:�����(�{����朜��\u000B\u0017vuuuww�ܹ\u0013ð��bC�ثV����/��\"�����?���T*U__�Ν;\u0019�Av9z\u001C�$�Fc||�#�<���s�~�w\u0007rw����Y���{���\u001B��[j�W;�*���j�\u001C\u001E\u0004�O.R\u0006����\u001C�R���U�0sl�l�9� \u0011\b\u000B���C��I���Aj�����<\u0017�\"#�##�\u0001\u0000n�������&++\u0013|\u001FX�����\u000F\u001F2\u001A�32ҔJ5\u0018\n�\u0014\u0016����^�n] ��?�������aYV����\\�f�D\"Y�r��ݻ�ӟr\u001C7\\h\u0000\u0000ȝG�~tt4����;11q�����\u001F�F#B��q\u001CB\u0010\u001E�PHH�˯�т8��&I�O>�X,�&M����V�������o0\u0018\u0002���*0A&��Z�������Ç\u000FWTTH�RT��T*\u0003�V�;�|��ɓ'�����_�ׯX��\\,7\b!���]r[�7_x��Y�熆E�GD\u0003\u0000�\u001Eg[[{UuMVf��h���Y��\u0013S&O�X\u00162R\u0005�P\u00108��#�Hl\"��/��\\�p�+A\u0001ǟ$I\fC�5�\u001A'\u0003�%\b�4\b<�\u000B��0���\u0003��]w�}7����7\u0012�5k�\u0014\u0017\u0017�T*��?���,\u0014�D\u001E���\u0007srr>��C$�(��P(&M�4m�4�$��~�e�z����իW�����\u001B7n\u001C�(0\f\u0003M=5]IaZ?'��h\t�ؿ|||iiimmmRRҷ�~���Qq � ��`�����\u000F\u001E<���o�4M�d��\u001B]\u001C\u0011\u0011������_�R%&&���˥��,�fdd��w�\u001B\u0015~\u0010�B�H�v~9'-~���^��$\t�$�1�,�\u0002��\u00011��\u00022���Gd�\u0013�\u0010M�\u001DΩ@�\f�(\u0014%).>���u��w��WCN��m�~��$9}��/��\"\u0000�\u0002�h'�~��O>�D�R�T*dG��O\u0002CJ70W\u001A�����\u000E\n\n\u001A\u0016�\u0002\u0018\u0006�(i\bV1r�\u0012GS�ph\u0010\\OOO[[�W_}��؈F\u0018�,\u001B\u0012\u0012�p8zzz�R)�&dff�>}����h4\u0006\u0007\u0007���\u0006�\u0016�\u0000%%%EDD h�m۶��#�^��+����|RK3���_�IO�1c\u0016�U\u001D��Q�|�\u0005a\u0014��\u0010nc\u0010�a\u0004������X��\u0004��y`t��ի7nܸcǎŋ\u0017�\u000F\u0003W��S���|�ɣG����{���h4(�\u0005��\u000B\b�\u0018\u0000 �\"j�\u001FF\u0010\u0000,-*�Hm��p�o�bS\fü^/��\f���ֶ��\"\u0003��y�����[g�َ\u001F?^RR������s���III\u000B\u0016,0�����\u0002�2\u0014|()))..FY\u0015��\u0002�;�~\b�\\I��]�bM��/\u0001�3f��yv�#�ڞ�\u0017��V\u0016s�\ba]\u001D?~���\u0015ų��\u0004 =����p8����v{VVV]]ݱcǢ���m����o�\u001D\u0014\u0014�~�z���J%�-�[�8\u0010G\u0014���\u0004\u0000���n�Q$N�Ĩ\"��^&�-X0����8q\u0002�G�|�����S�NQ\u0014�p�B��V�U�RSS�.]\u001A\u0013\u0013c2����zzz\u0002�[Լ�\u0002��5D�ʲ��gϞ=\u0006$\u0011Z�(�qI��\u000B�\u0018�\u000F\r\r\u001F\u0003,���\u001B��\u001B\u0011��$)��?77͚5c�K!������㏳������͟?ѢE�ׯ߽{7\u0000���\u001B\u0000 �H~�M\u0005c֠��+\b\u0001\u0000)���\u0001\u0017E����a��媭�ݿ�`������z���(����x��g-\u0016\u000B���<�Lff��ሉ�1\u0018\f\u0014E\u001D8p\u0000\u0015\u001F�l6t�#�\b�+\u0001�M�T�v�m�\u0016\u001A�{\u0018��\u0010�o�5�m�n�>@��\u0005���\u001B]����\b�0��t���o��o�Y�z��R�\"G8�\u001B\f\u0006�Ba��n���_��~�����СC����\u0007\u0006\u0006м��[\u0012\u0000`R���y���$��X/�fٳg�ƍ\u001Bi��y\u001EU���v�(A\u0010����h4>�/++����|�������]�v���\r\u001B6x<���\u001C�Պ��\u0006�(Ok4\u001A��\u001C�Ábpc��b�{�ݾz�b�F�l�k��\u0013�\u001B�0@�\u0002\u0011\u0011�==�'N���T\t��BCCQG�\u001Bo�\u0011\u001B\u001B�J�bcc�\u001E=j�����.ŀ\u001B�p\t�\u0000�\u0011�rQ\u0001�����#G\u0014\n���OHH@�9\u0018��8q���f���hކ������={����(\u0014\n����ח���~������'O��n��d���?��\u0003������|\n�H�{�ݞ�\u00141k֜\u001BQ^��%�ȓE\"��\\ll�x�\u0016��F��h4n۶�/�\b\t\tAh�8��������_`��,O'�+۬2\tE\u0012##�4M����۷\u000F�X-Y��h4~�駛7ow���