From: Bruno Trecenti Date: Wed, 26 Feb 2014 18:14:03 +0000 (-0300) Subject: added fibonacci algorithm to render the arcs X-Git-Url: https://pwan.org/git/?p=tech-radar.git;a=commitdiff_plain;h=bde8916e61332e70ad85dd5f65829d37b6df1245 added fibonacci algorithm to render the arcs --- diff --git a/examples/default.html b/examples/default.html index 87fa986..e302073 100644 --- a/examples/default.html +++ b/examples/default.html @@ -4,6 +4,7 @@ + @@ -43,7 +44,7 @@ new tr.models.Blip('A', adopt), new tr.models.Blip('B', trial), new tr.models.Blip('C', assess), - new tr.models.Blip('D', hold), + new tr.models.Blip('D', hold) ]); radar.setFirstQuadrant(toolsQuadrant); diff --git a/src/graphing/radar.js b/src/graphing/radar.js index b6386c6..704c572 100644 --- a/src/graphing/radar.js +++ b/src/graphing/radar.js @@ -1,5 +1,7 @@ tr.graphing.Radar = function (svg, size, radar) { - var self = {}; + var self, fib; + self = {}; + fib = new tr.util.Fib(); svg.attr('width', size).attr('height', size); @@ -23,16 +25,22 @@ tr.graphing.Radar = function (svg, size, radar) { .attr('stroke-width', 14); }; + function getRadius(cycles, i) { + var sequence = fib.sequence(cycles.length); + var total = fib.sum(cycles.length); + var sum = fib.sum(i); + + return center() - (center() * sum / total); + } + function plotCircles(cycles) { var increment; - increment = Math.round(center() / cycles.length); - cycles.forEach(function (cycle, i) { svg.append('circle') .attr('cx', center()) .attr('cy', center()) - .attr('r', center() - increment * i); + .attr('r', getRadius(cycles, i)); }); } @@ -44,12 +52,12 @@ tr.graphing.Radar = function (svg, size, radar) { cycles.forEach(function (cycle, i) { svg.append('text') .attr('y', center() + 4) - .attr('x', (i * increment) + 10) + .attr('x', center() - getRadius(cycles, i) + 10) .text(cycle.name()); svg.append('text') .attr('y', center() + 4) - .attr('x', size - (i * increment) - 10) + .attr('x', center() + getRadius(cycles, i) - 10) .attr('text-anchor', 'end') .text(cycle.name()); }); diff --git a/src/namespaces.js b/src/namespaces.js index 60fafca..3d15545 100644 --- a/src/namespaces.js +++ b/src/namespaces.js @@ -1,3 +1,4 @@ var tr = tr || {}; tr.models = {}; tr.graphing = {}; +tr.util = {}; diff --git a/src/util/fib.js b/src/util/fib.js new file mode 100644 index 0000000..2170b44 --- /dev/null +++ b/src/util/fib.js @@ -0,0 +1,24 @@ +tr.util.Fib = function () { + var self = {}; + + self.sequence = function (length) { + var result = [0, 1]; + + for (var i = 2; i < length; i++) { + result[i] = result[i-2] + result[i-1]; + } + + return result; + }; + + self.sum = function (length) { + if (length === 0) { return 0; } + if (length === 1) { return 1; } + + return self.sequence(length + 1).reduce(function (previous, current) { + return previous + current; + }, 0); + }; + + return self; +}; diff --git a/test/utils/fib-spec.js b/test/utils/fib-spec.js new file mode 100644 index 0000000..50d00f1 --- /dev/null +++ b/test/utils/fib-spec.js @@ -0,0 +1,13 @@ +describe('tr.util.Fib', function () { + it('returns the fibonacci sequence', function () { + var fib = new tr.util.Fib(); + + expect(fib.sequence(5)).toEqual([0, 1, 1, 2, 3]); + }); + + it('returns the sum of a sequence', function () { + var fib = new tr.util.Fib(); + + expect(fib.sum(5)).toEqual(12); + }); +});