diff options
-rw-r--r-- | app/index.html | 3 | ||||
-rw-r--r-- | app/js/directives.js | 1 | ||||
-rw-r--r-- | app/js/filters.js | 5 | ||||
-rw-r--r-- | app/js/services.js | 53 |
4 files changed, 48 insertions, 14 deletions
diff --git a/app/index.html b/app/index.html index de6de88..bf72b2a 100644 --- a/app/index.html +++ b/app/index.html @@ -7,6 +7,7 @@ <script type="text/javascript" src="lib/paper-full.js"></script> <script src="lib/angular.js"></script> <script src="js/app.js" ></script> + <script src="js/filters.js" ></script> <script src="js/services.js" ></script> <script src="js/directives.js" ></script> <script src="js/controllers.js" ></script> @@ -18,6 +19,8 @@ <div data-pg-line="line" class="line" resize></div> <div data-ng-repeat="point in points" data-pg-draggable="point" class="point" style="top: {{point.y}}px; left: {{point.x}}px;" data-ng-class="{selected: point.selected==true}"><div></div></div> + + <div data-ng-repeat="point in points | filter:{selected:true} | sliding2">{{point._1}}, {{point._2}}</div> </div> <ul> diff --git a/app/js/directives.js b/app/js/directives.js index f1c59b7..d20c034 100644 --- a/app/js/directives.js +++ b/app/js/directives.js @@ -47,6 +47,7 @@ app.directive('pgLine', function () { }; mainTool.onMouseMove = function(event) { + console.log(event.point); if (drag) { if (selected) { selected.position = event.point; diff --git a/app/js/filters.js b/app/js/filters.js index dce2495..7db9f17 100644 --- a/app/js/filters.js +++ b/app/js/filters.js @@ -6,7 +6,10 @@ app.filter('sliding2', function() { var groups = []; for (var i = 0; i < input.length - 1; ++i) { - groups.push([input[i], input[i+1]]); + groups.push({ + _1: input[i], + _2: input[i+1] + }); } return groups; }; diff --git a/app/js/services.js b/app/js/services.js index 035000e..79d4c40 100644 --- a/app/js/services.js +++ b/app/js/services.js @@ -9,25 +9,52 @@ app.service('pathService', function() { var dy = point1.y - point2.y; return Math.sqrt(dx * dx + dy * dy); }, - computePlaylist: function(songList, line, duration) { + computePlaylist: function(songList, constrainList, duration) { //compute distances from the constrain path - console.log('length',line.length); - var threshold = 100; - angular.forEach(songList, function(song){ + var songListCopy = songList.slice(0); + var maxDistOverall = Number.MIN_VALUE; + angular.forEach(songListCopy, function(song){ song.selected = false; - }); - - var selection = []; - angular.forEach(line, function(point){ - angular.forEach(songList, function(song){ + song.minDist = Number.MAX_VALUE; + for(var i=0; i<constrainList.length;i++){ + var point = constrainList[i]; var d = self.dist(song, point); - if(d < threshold && song.selected !== true){ - selection.push(song); - song.selected = true; + if(d < song.minDist){ + song.minDist = d; + song.closest = point; + song.closestIndex = i; } - }); + } + if(song.minDist > maxDistOverall){ + maxDistOverall = song.minDist; + } + }); + //select the songs + var selection = []; + var tuning = .5; + angular.forEach(songListCopy, function(song){ + song.rand = /*(tuning + tuning*Math.random())*/song.minDist; }); + songListCopy.sort(function(a,b){return a.rand-b.rand;}); + //take from the sorted list util we reach the desired duration + while(duration > 0 && songListCopy.length > 0){ + var removed = songListCopy.splice(0, 1); + selection.push(removed[0]); + duration -= 10; + removed[0].selected = true; + } + + selection.sort(function(a,b){ return a.closestIndex-b.closestIndex;}); + + //clean points + angular.forEach(songList, function(song) { + delete song.minDist; + delete song.closest; + delete song.closestIndex; + delete song.rand; + }); + return selection; } }; |