// Generated by CoffeeScript 1.10.0 (function() { var INITIAL_SCALE, a, coordinates, data, enter_hexes, height, hexes, legend, r, rec, svg, vis, width; width = 960; height = 500; data = []; coordinates = [ { x: '-a', y: 'r+r/2' }, { x: 'a', y: 'r+r/2' }, { x: '0', y: '0' }, { x: '-2a', y: '0' }, { x: '-a', y: '-r-r/2' }, { x: 'a', y: '-r-r/2' }, { x: '2a', y: '0' } ]; INITIAL_SCALE = height / 2.4; /* SVG setup */ svg = d3.select('svg').attr({ width: width, height: height, viewBox: (-width / 2) + " " + (-height / 2) + " " + width + " " + height }); vis = svg.append('g').attr({ transform: "rotate(" + (-Math.acos(5 * Math.sqrt(7) / 14) / Math.PI * 180) + ") translate(150, 50)" }); legend = svg.append('g').attr({ transform: "translate(-300, 0)" }); /* Recursive Procedure */ rec = function(order, index) { var i, j, results; if (order === 0) { data.push(hept_tree_utils.get_hex_data(index)); return; } results = []; for (i = j = 0; j <= 6; i = ++j) { results.push(rec(order - 1, index.concat([i]))); } return results; }; rec(1, []); /* 7 HEXAGONS COORDINATES */ hexes = vis.selectAll('path').data(data); enter_hexes = hexes.enter().append('g'); hexes.append('path').attr({ "class": 'hex', d: function(d) { return hept_tree_utils.hex_generate_svg_path(d.scale * INITIAL_SCALE, 0); }, transform: function(d) { return "translate(" + (d.translation.x * INITIAL_SCALE) + ", " + (d.translation.y * INITIAL_SCALE) + ") rotate(" + d.rotation + ")"; } }); hexes.append('circle').attr({ r: 5, cx: function(d) { return "" + (d.translation.x * INITIAL_SCALE); }, cy: function(d) { return "" + (d.translation.y * INITIAL_SCALE); } }); hexes.append('text').text(function(d, i) { return "(" + coordinates[i].x + ", " + coordinates[i].y + ")"; }).attr({ transform: function(d) { return "translate(" + (d.translation.x * INITIAL_SCALE) + ", " + (d.translation.y * INITIAL_SCALE - 15) + ") rotate(" + d.rotation + ")"; } }); /* HEXAGON LEGEND */ a = INITIAL_SCALE / 3; r = a / Math.sin(Math.PI / 3); legend.append('path').attr({ "class": 'hex_legend', d: hept_tree_utils.hex_generate_svg_path(a, 0) }); legend.append('path').attr({ "class": 'line', d: "M0 0 L" + (-a) + " 0", stroke: 'steelblue' }); legend.append('text').text('a').attr({ transform: "translate(" + (-a / 2) + ", 15)", fill: 'steelblue' }); legend.append('path').attr({ "class": 'line', d: "M0 0 L0 " + (-r), stroke: 'firebrick' }); legend.append('text').text('r').attr({ transform: "translate(10, " + (-r / 2) + ")", fill: 'firebrick' }); legend.append('path').attr({ "class": 'line', d: "M" + a + " " + (r / 2) + " L" + a + " " + (-r / 2), stroke: 'firebrick' }); legend.append('text').text('r').attr({ transform: "translate(" + (a + 10) + ", 0)", fill: 'firebrick' }); legend.append('circle').attr({ r: 5, cx: 0, cy: 0 }); }).call(this);