middleware/Tracking/Postures/KneeUpDetector.cs
author bastiena
Fri, 06 Apr 2012 11:48:00 +0200
changeset 24 2bdf5d51d434
parent 17 fda26bfcabef
child 27 6c08d4d7219e
permissions -rw-r--r--
Front IDILL : TuioPoint class header modified in order to manage 3D points TuioContainer class header modified in order to manage 3D points TuioCursor class header modified in order to manage 3D points TuioClient class header modified in order to manage 3D points TuioClient class modified in order to manage 3D points client class header modified in order to manage 3D points client class modified in order to manage 3D points
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
17
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
     1
/*
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
     2
* This file is part of the TraKERS\Middleware package.
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
     3
*
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
     4
* (c) IRI <http://www.iri.centrepompidou.fr/>
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
     5
*
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
     6
* For the full copyright and license information, please view the LICENSE_MIDDLEWARE
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
     7
* file that was distributed with this source code.
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
     8
*/
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
     9
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    10
/*
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    11
 * Projet : TraKERS
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    12
 * Module : MIDDLEWARE
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    13
 * Sous-Module : Tracking/Postures
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    14
 * Classe : KneeUpDetector
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    15
 * 
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    16
 * Auteur : alexandre.bastien@iri.centrepompidou.fr
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    17
 * 
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    18
 * Fonctionnalités : Permet de détecter si l'utilisateur a levé le genou, en se basant sur
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    19
 * des règles appliquées à la positions des noeuds dans le temps.
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    20
 */
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    21
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    22
using System;
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    23
using System.Collections.Generic;
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    24
using System.Linq;
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    25
using System.Text;
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    26
using Microsoft.Kinect;
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    27
using Trakers.Debug;
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    28
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    29
namespace Trakers.Tracking.Postures
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    30
{
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    31
    public class KneeUpDetector : PostureDetector
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    32
    {
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    33
        public KneeUpDetector(DebugWindow _debug) : base(_debug)
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    34
        {
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    35
        }
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    36
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    37
        /*
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    38
         * Méthode de détection du penché.
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    39
         */
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    40
        public bool CheckForKneeUp()
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    41
        {
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    42
            //Crée un état local afin de pouvoir analyser s'il y a une posture.
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    43
            List<Joint> localState = new List<Joint>(currentState);
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    44
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    45
            //La distance de référence est ici la distance entre le milieu du dos et le milieu des épaules.
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    46
            float refDistance = Math.Abs(localState[(int)JointType.Spine].Position.Y - localState[(int)JointType.ShoulderCenter].Position.Y);
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    47
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    48
            /*if (Math.Abs(localState[(int)JointType.KneeLeft].Position.Y - localState[(int)JointType.KneeRight].Position.Y) > refDistance / 2)
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    49
                debug.onR0(true);
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    50
            else
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    51
                debug.onR0(false);
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    52
            if (Math.Abs(localState[(int)JointType.HipCenter].Position.Z - localState[(int)JointType.KneeLeft].Position.Z) > 0.20)
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    53
                debug.onR1(true);
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    54
            else
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    55
                debug.onR1(false);
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    56
            if (Math.Abs(localState[(int)JointType.HipCenter].Position.Z - localState[(int)JointType.KneeRight].Position.Z) > 0.20)
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    57
                debug.onR2(true);
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    58
            else
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    59
                debug.onR2(false);*/
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    60
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    61
            //Si un genou n'est pas plus haut de la distance de référence/2 que l'autre
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    62
            //OU si le genou gauche n'est pas plus proche de 20cm par rapport à la hanche
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    63
            //OU si le genou droit n'est pas plus proche de 20cm par rapport à la hanche.
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    64
            //Alors on n'a pas levé de genou.
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    65
            if (Math.Abs(localState[(int)JointType.KneeLeft].Position.Y - localState[(int)JointType.KneeRight].Position.Y) < refDistance / 2 ||
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    66
            Math.Abs(localState[(int)JointType.HipCenter].Position.Z - localState[(int)JointType.KneeLeft].Position.Z) < 0.20 &&
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    67
            Math.Abs(localState[(int)JointType.HipCenter].Position.Z - localState[(int)JointType.KneeRight].Position.Z) < 0.20)
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    68
                return false;
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    69
            return true;
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    70
        }
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    71
    }
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    72
}