From 90f4cdfdc901131530e38579fbb99c8dd32411fa Mon Sep 17 00:00:00 2001 From: Nicolas Bornand Date: Mon, 12 May 2014 22:37:15 +0200 Subject: improve path computations speed --- app/index.html | 1 - app/js/services.js | 39 ++++++++++++-- tests/pathAlgoPerf.html | 135 ++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 171 insertions(+), 4 deletions(-) create mode 100644 tests/pathAlgoPerf.html diff --git a/app/index.html b/app/index.html index 0404bb0..77bcb2d 100644 --- a/app/index.html +++ b/app/index.html @@ -16,7 +16,6 @@ - diff --git a/app/js/services.js b/app/js/services.js index d18e923..8dbd1b2 100644 --- a/app/js/services.js +++ b/app/js/services.js @@ -9,7 +9,7 @@ app.service('pathService', function() { var dy = point1.y - point2.y; return Math.sqrt(dx * dx + dy * dy); }, - computePlaylist: function(songList, line, duration) { + computePlaylistOld: function(songList, line, duration) { //compute distances from the constrain path console.log('length', line.length); @@ -29,7 +29,39 @@ app.service('pathService', function() { }); }); return selection; - } + }, + computePlaylist:function(songList, line, duration) { + //compute distances from the constrain path + + var threshold = 60; + for(var i=songList.length-1; i>0; i--){ + songList[i].selected = false; + }; + var songCopy = songList.slice(0); + songCopy.sort(function(a,b){return a.x-b.x;}); + + var selection = []; + for(var i=line.length-1; i>0; i--) { + var point = line[i]; + var min = line[i].x-threshold; + var max = line[i].x+threshold; + var j=songCopy.length-1; + while(songCopy[j].x > max && j > 0){ + j--; + } + while(songCopy[j].x > min && j > 0){ + var song = songCopy[j]; + var d = self.dist(song, point); + if (d < threshold) { + songCopy.splice(j,1); + selection.push(song); + song.selected = true; + } + j--; + }; + }; + return selection; + } }; return self; }); @@ -39,12 +71,13 @@ app.service('musicPlayer', function() { startSongWithDuration: function(id, duration) { $('#ytplayer').attr('src', 'https://www.youtube.com/embed/' + id + '?autoplay=1&modestbranding=1'); - self.musicTimer = setInterval(changeSong, duration * 1000); + self.musicTimer = setInterval(self.changeSong, duration * 1000); }, changeSong: function() { clearInterval(self.musicTimer); } }; + return self; }); diff --git a/tests/pathAlgoPerf.html b/tests/pathAlgoPerf.html new file mode 100644 index 0000000..5c91d90 --- /dev/null +++ b/tests/pathAlgoPerf.html @@ -0,0 +1,135 @@ + + + + + TODO supply a title + + + + + +
TODO write content
+ + + -- cgit v1.2.3