diff -r 25e71ada2a6d -r 37ebedd84755 middleware/Tracking/Gestures/WaveDetector.cs --- a/middleware/Tracking/Gestures/WaveDetector.cs Wed May 30 10:22:46 2012 +0200 +++ b/middleware/Tracking/Gestures/WaveDetector.cs Thu Jun 21 16:52:56 2012 +0200 @@ -61,25 +61,32 @@ //De la position p1 à pn, on suit l'algorithme. for (int i = localHistory.Count - indexesToCheck + 1; i < localHistory.Count; i++) { - /*if (localHistory[i][(int)JointType.HandRight].Position.Y < localHistory[i][(int)JointType.ElbowRight].Position.Y + refDistance) - debug.onR0(true); + /*if (localHistory[i][(int)JointType.HandRight].Position.Y + refDistance / 2 > localHistory[i][(int)JointType.ElbowRight].Position.Y) + debug.onR0(false); else - debug.onR0(false); - if (localHistory[i][(int)JointType.HandRight].Position.Y < localHistory[i][(int)JointType.HipCenter].Position.Y) + debug.onR0(true); + if (localHistory[i][(int)JointType.HandRight].Position.Y > localHistory[i][(int)JointType.HipCenter].Position.Y) + debug.onR1(false); + else debug.onR1(true); + if (localHistory[i][(int)JointType.HandRight].Position.Y > localHistory[i][(int)JointType.WristRight].Position.Y) + debug.onR2(false); else - debug.onR1(false); - if (localHistory[i][(int)JointType.HandRight].Position.Y < localHistory[i][(int)JointType.WristRight].Position.Y + refDistance / 4) debug.onR2(true); + if (Math.Abs(localHistory[i][(int)JointType.HandRight].Position.Z - localHistory[i][(int)JointType.Head].Position.Z) > 0.20) + debug.onR3(false); else - debug.onR2(false);*/ + debug.onR3(true);*/ //Si la position Y de la main droite est plus haute que le coude + la distance de référence //OU si la position Y de la main droite est plus basse que la hanche - //OU si la position Y de la main droite est plus haute que le poignet + le quart de la distance de référence. + //OU si la position Y de la main droite est plus haute que le poignet + le quart de la distance de référence + //OU si la distance Y de la main à la tete est plus grande que la distance de référence + //OU si la distance Z de la main à la tete est plus grande que 20 cm. //Alors la main en question ne fait pas de Wave. - if (localHistory[i][(int)JointType.HandRight].Position.Y > localHistory[i][(int)JointType.ElbowRight].Position.Y + refDistance || + if (localHistory[i][(int)JointType.HandRight].Position.Y + refDistance / 2 > localHistory[i][(int)JointType.ElbowRight].Position.Y || localHistory[i][(int)JointType.HandRight].Position.Y > localHistory[i][(int)JointType.HipCenter].Position.Y || - localHistory[i][(int)JointType.HandRight].Position.Y > localHistory[i][(int)JointType.WristRight].Position.Y + refDistance / 4) + localHistory[i][(int)JointType.HandRight].Position.Y > localHistory[i][(int)JointType.WristRight].Position.Y || + Math.Abs(localHistory[i][(int)JointType.HandRight].Position.Z - localHistory[i][(int)JointType.Head].Position.Z) > 0.20) return false; //On vérifie si la main à bougé vers la droite. @@ -88,7 +95,7 @@ movedRight = true; //Si la main a bougé vers la droite, on regarde si elle est retournée à sa position initiale. - if (movedRight && localHistory[i][(int)JointType.HandRight].Position.X <= startPosX) + if (movedRight && Math.Abs(localHistory[i][(int)JointType.HandRight].Position.X - startPosX) <= refDistance) { history.Clear(); return true;