aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/index.html3
-rw-r--r--app/js/directives.js1
-rw-r--r--app/js/filters.js5
-rw-r--r--app/js/services.js53
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;
}
};