59 * |
61 * |
60 * HeadFarAboveBaseLine |
62 * HeadFarAboveBaseLine |
61 */ |
63 */ |
62 |
64 |
63 //La distance de référence est ici la distance entre le milieu du dos et le milieu des épaules. |
65 //La distance de référence est ici la distance entre le milieu du dos et le milieu des épaules. |
64 refDistance = Math.Abs(localHistory[0][spineID].Position.Y - localHistory[0][shoulderCenterID].Position.Y); |
66 refDistance = Math.Abs(localHistory[0][(int)JointType.Spine].Position.Y - localHistory[0][(int)JointType.ShoulderCenter].Position.Y); |
65 //On commence la position pour les indexesToCheck dernières postures (celle à l'index 0 étant la dernière). |
67 //On commence la position pour les indexesToCheck dernières postures (celle à l'index 0 étant la dernière). |
66 |
68 |
67 int beginIdx = localHistory.Count - indexesToCheck + 1; |
69 int beginIdx = localHistory.Count - indexesToCheck + 1; |
68 int middleIdx = localHistory.Count - indexesToCheck / 2; |
70 int middleIdx = localHistory.Count - indexesToCheck / 2; |
69 |
71 |
70 bool middleOK = true, topOfJump = false; |
72 //bool middleOK = true |
|
73 bool topOfJump = false; |
71 |
74 |
72 |
75 |
73 |
76 |
74 //De la position p1 à pn, on suit l'algorithme. |
77 //De la position p1 à pn, on suit l'algorithme. |
75 for (int i = beginIdx ; i < localHistory.Count ; i++) |
78 for (int i = beginIdx ; i < localHistory.Count ; i++) |
76 { |
79 { |
77 |
80 |
78 if (localHistory[i][handRightID].Position.Y < localHistory[beginIdx][handRightID].Position.Y + refDistance && |
81 if (localHistory[i][(int)JointType.HandRight].Position.Y < localHistory[beginIdx][(int)JointType.HandRight].Position.Y + refDistance && |
79 localHistory[i - 1][handRightID].Position.Y < localHistory[i][handRightID].Position.Y) |
82 localHistory[i - 1][(int)JointType.HandRight].Position.Y < localHistory[i][(int)JointType.HandRight].Position.Y) |
80 { |
83 { |
81 topOfJump = true; |
84 topOfJump = true; |
82 //Console.Out.WriteLine("TOP"); |
85 //Console.Out.WriteLine("TOP"); |
83 } |
86 } |
84 |
87 |
85 if (localHistory[i - 1][handRightID].Position.Y > localHistory[i][handRightID].Position.Y && !topOfJump) |
88 if (localHistory[i - 1][(int)JointType.HandRight].Position.Y > localHistory[i][(int)JointType.HandRight].Position.Y && !topOfJump) |
86 return false; |
89 return false; |
87 |
90 |
88 //Si la position Y de la main est plus haute que la tête |
91 //Si la position Y de la main est plus haute que la tête |
89 //OU si la position Y de la main est plus basse que la hanche |
92 //OU si la position Y de la main est plus basse que la hanche |
90 //OU si la nouvelle position Z de la main est moins profonde que la précédente |
93 //OU si la nouvelle position Z de la main est moins profonde que la précédente |
91 //OU si la nouvelle position X de la main est plus éloignée de la distance N par rapport à la première position X |
94 //OU si la nouvelle position X de la main est plus éloignée de la distance N par rapport à la première position X |
92 //OU si la nouvelle position Y de la main est plus éloignée de la distance N par rapport à la première position Y |
95 //OU si la nouvelle position Y de la main est plus éloignée de la distance N par rapport à la première position Y |
93 //Alors la main en question ne fait pas de push. |
96 //Alors la main en question ne fait pas de push. |
94 if (localHistory[i-1][handRightID].Position.Y > localHistory[i][handRightID].Position.Y && |
97 if (localHistory[i - 1][(int)JointType.HandRight].Position.Y > localHistory[i][(int)JointType.HandRight].Position.Y && |
95 topOfJump || localHistory[i - 1][handRightID].Position.Y < localHistory[i][handRightID].Position.Y && |
98 topOfJump || localHistory[i - 1][(int)JointType.HandRight].Position.Y < localHistory[i][(int)JointType.HandRight].Position.Y && |
96 !topOfJump) |
99 !topOfJump) |
97 return false; |
100 return false; |
98 } |
101 } |
99 |
102 |
100 //Console.Out.WriteLine("OK"); |
103 //Console.Out.WriteLine("OK"); |
107 |
110 |
108 //Si la dernière position de la main droite/gauche est sur le côté gauche/droit du corps |
111 //Si la dernière position de la main droite/gauche est sur le côté gauche/droit du corps |
109 //OU si la première position calculée de la main droite/gauche est sur le côté gauche/droit du corps |
112 //OU si la première position calculée de la main droite/gauche est sur le côté gauche/droit du corps |
110 //Alors on retourne faux. |
113 //Alors on retourne faux. |
111 |
114 |
112 //if( |
|
113 |
|
114 //On supprime l'historique local. |
115 //On supprime l'historique local. |
115 //localHistory.Clear(Math.Abs(localHistory[i-1][handRightID].Position.Y)); |
116 |
116 |
|
117 debug.ExceptionLbl.Background = System.Windows.Media.Brushes.Yellow; |
117 debug.ExceptionLbl.Background = System.Windows.Media.Brushes.Yellow; |
118 Console.WriteLine("{" + n++ + "}" + "JUMP"); |
118 |
119 |
|
120 return false; |
119 return false; |
121 } |
120 } |
122 } |
121 } |
123 } |
122 } |