middleware/Tracking/Postures/BendDetector.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 : BendDetector
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 s'est penché, 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 BendDetector : PostureDetector
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    32
    {
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    33
        public BendDetector(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 CheckForBend()
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
            /*if (localState[(int)JointType.Head].Position.Z + 0.10 < localState[(int)JointType.ShoulderCenter].Position.Z)
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    46
                debug.onR0(true);
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    47
            else
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    48
                debug.onR0(false);
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    49
            if (localState[(int)JointType.ShoulderCenter].Position.Z + 0.20 < localState[(int)JointType.HipCenter].Position.Z)
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    50
                debug.onR1(true);
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    51
            else
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    52
                debug.onR1(false);
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    53
            if (Math.Abs(localState[(int)JointType.HipCenter].Position.Z - localState[(int)JointType.KneeRight].Position.Z) < 0.20)
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    54
                debug.onR2(true);
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    55
            else
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    56
                debug.onR2(false);*/
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    57
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    58
            //Si la tête n'est pas plus proche d'au moins 20cm que les épaules
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    59
            //OU si les épaules ne sont pas plus proches d'au moins 20 cm que les hanches
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    60
            //OU si les hanches et les genoux ne sont pas au même niveau avec 20 cm d'erreur.
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    61
            //Alors on ne s'est pas penché.
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    62
            if (localState[(int)JointType.Head].Position.Z + 0.10 >= localState[(int)JointType.ShoulderCenter].Position.Z ||
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    63
            localState[(int)JointType.ShoulderCenter].Position.Z + 0.20 >= localState[(int)JointType.HipCenter].Position.Z ||
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    64
            Math.Abs(localState[(int)JointType.HipCenter].Position.Z - localState[(int)JointType.KneeRight].Position.Z) > 0.20)
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    65
                return false;
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    66
            return true;
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    67
        }
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    68
    }
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    69
}