middleware/Tracking/Postures/CrossDetector.cs
author bastiena
Wed, 30 May 2012 10:21:36 +0200
changeset 35 4267d6d27a7d
parent 27 6c08d4d7219e
permissions -rw-r--r--
Front IDILL : Config file added dor the Front Random play at the beginning (when no user is detected) Pointers added Curves added (search and filter modes) Mosaic completion added (depletion to come later) State of the Front : just before the communication module creation
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
*
27
6c08d4d7219e Middleware :
bastiena
parents: 23
diff changeset
     6
* For the full copyright and license information, please view the LICENSE
17
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 : CrossDetector
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 croisé les bras en X, 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 CrossDetector : PostureDetector
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    32
    {
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    33
        public CrossDetector(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 CheckForCross()
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
            refDistance = Math.Abs(localState[(int)JointType.Spine].Position.Y - localState[(int)JointType.ShoulderCenter].Position.Y);
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    47
23
7372c4f249c7 Front IDILL :
bastiena
parents: 17
diff changeset
    48
            /*if (localState[(int)JointType.HandLeft].Position.Y < localState[(int)JointType.ElbowLeft].Position.Y - refDistance / 2)
17
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 (localState[(int)JointType.HandRight].Position.Y < localState[(int)JointType.ElbowRight].Position.Y - refDistance / 2)
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 (localState[(int)JointType.ElbowLeft].Position.X + refDistance / 2 < localState[(int)JointType.ElbowRight].Position.X)
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
            if (localState[(int)JointType.HandLeft].Position.X + refDistance / 2 > localState[(int)JointType.HandRight].Position.X)
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    61
                debug.onR3(true);
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    62
            else
23
7372c4f249c7 Front IDILL :
bastiena
parents: 17
diff changeset
    63
                debug.onR3(false);*/
17
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    64
            //Si la position Y de la main gauche n'est pas plus haute de la distance de référence que le coude gauche
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    65
            //OU si la position Y de la main droite n'est pas plus haute de la distance de référence que le coude droit
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    66
            //OU si la position X du coude gauche n'est pas plus à gauche de la distance de référence/2 que le coude droit
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    67
            //OU si la position X de la main gauche n'est pas plus à droite de la distance de référence/4 que la main gauche.
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    68
            //Alors l'utilisateur ne croise pas les bras.
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    69
            /*if (localState[(int)JointType.HandRight].Position.Y > localState[(int)JointType.ElbowRight].Position.Y + refDistance ||
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    70
            localState[(int)JointType.HandRight].Position.Y > localState[(int)JointType.HipCenter].Position.Y ||
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    71
            localState[(int)JointType.HandRight].Position.Y > localState[(int)JointType.WristRight].Position.Y + refDistance / 4)
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    72
                return false;
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    73
            return true;*/
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    74
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    75
            return false;
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    76
        }
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    77
    }
fda26bfcabef Middleware :
bastiena
parents:
diff changeset
    78
}