Jelajahi Sumber

multiple object v2 + doc

asr@asr.fr 2 tahun lalu
induk
melakukan
7b4d0de849
4 mengubah file dengan 23 tambahan dan 15 penghapusan
  1. 12 2
      README.md
  2. 2 5
      backend/server.js
  3. 4 3
      frontend/assets/config.json
  4. 5 5
      frontend/index.html

+ 12 - 2
README.md

@@ -1,10 +1,20 @@
 ## install
 
-node Js lts (v16.15.0)
+node JS lts (v16.15.0)
 
 puis `npm install`
 
 ## lancer
 
-node server.js
+node backend/server.js
 Une page de test est accessible sur localhost:5000
+Penser à modifier maxDistanceBetweenPoints en fonction de l'écran
+
+## idées d'amélioration
+
+attendre plusieur signaux pour valider un triangle
+filter sur la position (pas deux triangles dans la même zone)
+points plus éloignés sur les tangibles -> meilleure précision
+connaitre les distances précises entre les points d'un triangle pour éviter les faux positifs
+traitement uniquement coté navigateur
+check performances

+ 2 - 5
backend/server.js

@@ -165,19 +165,16 @@ function getOrientation(dotTrio, topIndex) {
 function objectGarbageCollector(){
 	//si un point dans last dots est detecté dans un des triangle alors on ne réduit pas sa duration
 	for(const triangle of objectsAlive){
-		if(triangle.dots.some(dot => lastDots.some(lastDot => lastDot.x == lastDot.x))){
-			console.log("---- filter");
+		if(triangle.dots.some(dot => lastDots.some(lastDot => lastDot.x == dot.x))){	
 		} else {
 			triangle.remainingDuration -= 1;
 		}
 	};
 	objectsAlive = objectsAlive.filter(triangle => triangle.remainingDuration > 0);
 	createBundle();
-	console.dir(lastDots);
-	console.dir(objectsAlive);
 }
 
-setInterval(objectGarbageCollector, 1000);
+setInterval(objectGarbageCollector, config.app.garbageCollectorInterval);
 
 let currentOscBundle = null;
 let hasPending = false;

+ 4 - 3
frontend/assets/config.json

@@ -3,9 +3,10 @@
 		"oscUdpPort": 3333,
 		"httpPort": 5000,
 		"timerRefresh": 50,
-		"maxDistanceBetweenPoints": 100,
-		"matchingTolerance": 2,
+		"maxDistanceBetweenPoints": 60,
+		"matchingTolerance": 1,
 		"remainingDuration": 3,
+		"garbageCollectorInterval": 1000,
 		"debug": true,
 		"debugLog": {
 			"backend": {
@@ -14,7 +15,7 @@
 					"dots": false,
 					"segments": false,
 					"triangles": false,
-					"apex": true,
+					"apex": false,
 					"matchingObject": false,
 					"aliveTriangles": false
 				},

+ 5 - 5
frontend/index.html

@@ -151,11 +151,11 @@
 				setInterval(draw, 10);
 
 				const cursors = {};
-				const objects = {};
+				const tuioObjects = {};
 
 				function draw(){
 					context.clearRect(0, 0, canvas.width, canvas.height);
-					for(obj of Object.values(objects)){
+					for(obj of Object.values(tuioObjects)){
 						if (config.app.debugDisplay) {
 							const apex = {
 								x: Math.cos(obj.angle * Math.PI /180) * 150 + obj.xPos,
@@ -207,14 +207,14 @@
 				},
 
 				onAddTuioObject = function(addObject) {
-					objects[addObject.symbolId] = addObject;
+					tuioObjects[addObject.symbolId] = addObject;
 					if (config.app.debug && config.app.debugLog.frontend.receiver.onAddTuioObject) {
 						console.log('addTuioObject', addObject);
 					}
 				},
 
 				onUpdateTuioObject = function(updateObject) {
-					objects[updateObject.symbolId] = updateObject;
+					tuioObjects[updateObject.symbolId] = updateObject;
 
 					if (config.app.debug && config.app.debugLog.frontend.receiver.onUpdateTuioObject) {
 						console.log('updateTuioObject', updateObject);
@@ -223,7 +223,7 @@
 
 				onRemoveTuioObject = function(removeObject) {
 
-					delete objects[removeObject.symbolId];
+					delete tuioObjects[removeObject.symbolId];
 
 					if (config.app.debug && config.app.debugLog.frontend.receiver.onRemoveTuioObject) {
 						console.log('removeTuioObject', removeObject);