--- 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;