middleware/Tracking/Gestures/UserPositionDetector.cs
author bastiena
Thu, 21 Jun 2012 17:13:40 +0200
changeset 39 15b11d291417
parent 37 37ebedd84755
permissions -rw-r--r--
MID : Formatting the newest classes
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
15
4b78f179e7ce Middleware :
bastiena
parents:
diff changeset
     1
/*
4b78f179e7ce Middleware :
bastiena
parents:
diff changeset
     2
* This file is part of the TraKERS\Middleware package.
4b78f179e7ce Middleware :
bastiena
parents:
diff changeset
     3
*
4b78f179e7ce Middleware :
bastiena
parents:
diff changeset
     4
* (c) IRI <http://www.iri.centrepompidou.fr/>
4b78f179e7ce Middleware :
bastiena
parents:
diff changeset
     5
*
27
6c08d4d7219e Middleware :
bastiena
parents: 17
diff changeset
     6
* For the full copyright and license information, please view the LICENSE
15
4b78f179e7ce Middleware :
bastiena
parents:
diff changeset
     7
* file that was distributed with this source code.
4b78f179e7ce Middleware :
bastiena
parents:
diff changeset
     8
*/
4b78f179e7ce Middleware :
bastiena
parents:
diff changeset
     9
4b78f179e7ce Middleware :
bastiena
parents:
diff changeset
    10
/*
4b78f179e7ce Middleware :
bastiena
parents:
diff changeset
    11
 * Projet : TraKERS
4b78f179e7ce Middleware :
bastiena
parents:
diff changeset
    12
 * Module : MIDDLEWARE
4b78f179e7ce Middleware :
bastiena
parents:
diff changeset
    13
 * Sous-Module : Tracking/Gestures
4b78f179e7ce Middleware :
bastiena
parents:
diff changeset
    14
 * Classe : UserPositionDetector
4b78f179e7ce Middleware :
bastiena
parents:
diff changeset
    15
 * 
4b78f179e7ce Middleware :
bastiena
parents:
diff changeset
    16
 * Auteur : alexandre.bastien@iri.centrepompidou.fr
4b78f179e7ce Middleware :
bastiena
parents:
diff changeset
    17
 * 
4b78f179e7ce Middleware :
bastiena
parents:
diff changeset
    18
 * Fonctionnalités : Permet de détecter si l'utilisateur s'est déplacé dans la zone de détection, en se basant
4b78f179e7ce Middleware :
bastiena
parents:
diff changeset
    19
 * sur la distance de l'utilisateur à Kinect.
4b78f179e7ce Middleware :
bastiena
parents:
diff changeset
    20
 */
4b78f179e7ce Middleware :
bastiena
parents:
diff changeset
    21
4b78f179e7ce Middleware :
bastiena
parents:
diff changeset
    22
using System;
4b78f179e7ce Middleware :
bastiena
parents:
diff changeset
    23
using System.Collections.Generic;
4b78f179e7ce Middleware :
bastiena
parents:
diff changeset
    24
using System.Linq;
4b78f179e7ce Middleware :
bastiena
parents:
diff changeset
    25
using System.Text;
4b78f179e7ce Middleware :
bastiena
parents:
diff changeset
    26
17
fda26bfcabef Middleware :
bastiena
parents: 15
diff changeset
    27
namespace Trakers.Tracking.Gestures
15
4b78f179e7ce Middleware :
bastiena
parents:
diff changeset
    28
{
4b78f179e7ce Middleware :
bastiena
parents:
diff changeset
    29
    public class UserPositionDetector
4b78f179e7ce Middleware :
bastiena
parents:
diff changeset
    30
    {
4b78f179e7ce Middleware :
bastiena
parents:
diff changeset
    31
        float minDistance, maxDistance, zeroPoint;
4b78f179e7ce Middleware :
bastiena
parents:
diff changeset
    32
        float searchMinDistance, searchMaxDistance;
4b78f179e7ce Middleware :
bastiena
parents:
diff changeset
    33
4b78f179e7ce Middleware :
bastiena
parents:
diff changeset
    34
        static int n = 0;
4b78f179e7ce Middleware :
bastiena
parents:
diff changeset
    35
4b78f179e7ce Middleware :
bastiena
parents:
diff changeset
    36
        /*
4b78f179e7ce Middleware :
bastiena
parents:
diff changeset
    37
         * Le constructeur prend en entrée le debug mais aussi les principales distances qui délimitent la
4b78f179e7ce Middleware :
bastiena
parents:
diff changeset
    38
         * zone de détection.
4b78f179e7ce Middleware :
bastiena
parents:
diff changeset
    39
         */
4b78f179e7ce Middleware :
bastiena
parents:
diff changeset
    40
        public UserPositionDetector(float _minDistance, float _maxDistance, float _zeroPoint, float _searchMinDistance, float _searchMaxDistance)
4b78f179e7ce Middleware :
bastiena
parents:
diff changeset
    41
        {
4b78f179e7ce Middleware :
bastiena
parents:
diff changeset
    42
            minDistance = _minDistance;
4b78f179e7ce Middleware :
bastiena
parents:
diff changeset
    43
            maxDistance = _maxDistance;
4b78f179e7ce Middleware :
bastiena
parents:
diff changeset
    44
            searchMinDistance = _searchMinDistance;
4b78f179e7ce Middleware :
bastiena
parents:
diff changeset
    45
            searchMaxDistance = _searchMaxDistance;
4b78f179e7ce Middleware :
bastiena
parents:
diff changeset
    46
            zeroPoint = _zeroPoint;
4b78f179e7ce Middleware :
bastiena
parents:
diff changeset
    47
        }
4b78f179e7ce Middleware :
bastiena
parents:
diff changeset
    48
4b78f179e7ce Middleware :
bastiena
parents:
diff changeset
    49
        public void setParams(float minDist, float maxDist, float minDistHands, float maxDistHands, float zero)
4b78f179e7ce Middleware :
bastiena
parents:
diff changeset
    50
        {
4b78f179e7ce Middleware :
bastiena
parents:
diff changeset
    51
            //On charge tous les paramètres d'un coup.
4b78f179e7ce Middleware :
bastiena
parents:
diff changeset
    52
            minDistance = minDist;
4b78f179e7ce Middleware :
bastiena
parents:
diff changeset
    53
            maxDistance = maxDist;
4b78f179e7ce Middleware :
bastiena
parents:
diff changeset
    54
            searchMinDistance = minDistHands;
4b78f179e7ce Middleware :
bastiena
parents:
diff changeset
    55
            searchMaxDistance = maxDistHands;
4b78f179e7ce Middleware :
bastiena
parents:
diff changeset
    56
            zeroPoint = zero;
4b78f179e7ce Middleware :
bastiena
parents:
diff changeset
    57
        }
4b78f179e7ce Middleware :
bastiena
parents:
diff changeset
    58
4b78f179e7ce Middleware :
bastiena
parents:
diff changeset
    59
        /*
4b78f179e7ce Middleware :
bastiena
parents:
diff changeset
    60
         * Lit la position de l'utilisateur à Kinect et ressort un pourcentage de proximité.
4b78f179e7ce Middleware :
bastiena
parents:
diff changeset
    61
         * Règles : Droite affine de coefficient négatif.
4b78f179e7ce Middleware :
bastiena
parents:
diff changeset
    62
         * .
4b78f179e7ce Middleware :
bastiena
parents:
diff changeset
    63
         */
4b78f179e7ce Middleware :
bastiena
parents:
diff changeset
    64
        public float CalcProximity(float distance)
4b78f179e7ce Middleware :
bastiena
parents:
diff changeset
    65
        {
4b78f179e7ce Middleware :
bastiena
parents:
diff changeset
    66
            //Si on se trouve trop loin.
4b78f179e7ce Middleware :
bastiena
parents:
diff changeset
    67
            if (distance > maxDistance)
4b78f179e7ce Middleware :
bastiena
parents:
diff changeset
    68
                return 0.0f;
4b78f179e7ce Middleware :
bastiena
parents:
diff changeset
    69
            //Si on se trouve trop près.
4b78f179e7ce Middleware :
bastiena
parents:
diff changeset
    70
            if (distance < searchMinDistance)
4b78f179e7ce Middleware :
bastiena
parents:
diff changeset
    71
                return 0.0f;
4b78f179e7ce Middleware :
bastiena
parents:
diff changeset
    72
            //Si on n'est pas encore trop près mais qu'on dépasse le point zéro.
4b78f179e7ce Middleware :
bastiena
parents:
diff changeset
    73
            if (distance < zeroPoint)
4b78f179e7ce Middleware :
bastiena
parents:
diff changeset
    74
                return 100.0f;
4b78f179e7ce Middleware :
bastiena
parents:
diff changeset
    75
4b78f179e7ce Middleware :
bastiena
parents:
diff changeset
    76
            //Equation, de droite affine à partir de deux points.
4b78f179e7ce Middleware :
bastiena
parents:
diff changeset
    77
            //Ici 99 tout simplement car 100 - 1, les limites de pourcentage de proximité.
4b78f179e7ce Middleware :
bastiena
parents:
diff changeset
    78
            float a = 99/((float)zeroPoint - maxDistance);
4b78f179e7ce Middleware :
bastiena
parents:
diff changeset
    79
            float b = 100 - a * zeroPoint;
4b78f179e7ce Middleware :
bastiena
parents:
diff changeset
    80
4b78f179e7ce Middleware :
bastiena
parents:
diff changeset
    81
            return a * distance + b;
4b78f179e7ce Middleware :
bastiena
parents:
diff changeset
    82
        }
4b78f179e7ce Middleware :
bastiena
parents:
diff changeset
    83
4b78f179e7ce Middleware :
bastiena
parents:
diff changeset
    84
        /*
4b78f179e7ce Middleware :
bastiena
parents:
diff changeset
    85
         * Estime le nombre de vidéos à afficher en fonction du pourcentage de proximité et du nombre de
4b78f179e7ce Middleware :
bastiena
parents:
diff changeset
    86
         * vidéos dans la mosaïque.
4b78f179e7ce Middleware :
bastiena
parents:
diff changeset
    87
         * .
4b78f179e7ce Middleware :
bastiena
parents:
diff changeset
    88
         */
4b78f179e7ce Middleware :
bastiena
parents:
diff changeset
    89
        public int ImagesToShow(float proximity, int N)
4b78f179e7ce Middleware :
bastiena
parents:
diff changeset
    90
        {
4b78f179e7ce Middleware :
bastiena
parents:
diff changeset
    91
            //Si la proximité est nulle, on retourne 0.
37
bastiena
parents: 27
diff changeset
    92
            if (proximity <= 20f)
15
4b78f179e7ce Middleware :
bastiena
parents:
diff changeset
    93
                return 0;
4b78f179e7ce Middleware :
bastiena
parents:
diff changeset
    94
            //Si on n'est pas encore trop près mais qu'on dépasse le point zéro.
37
bastiena
parents: 27
diff changeset
    95
            if (proximity >= 80f)
15
4b78f179e7ce Middleware :
bastiena
parents:
diff changeset
    96
                return N;
4b78f179e7ce Middleware :
bastiena
parents:
diff changeset
    97
4b78f179e7ce Middleware :
bastiena
parents:
diff changeset
    98
            //Pour chaque intervalle de déciles (dans les pourcentages), le nombre de dizaines
4b78f179e7ce Middleware :
bastiena
parents:
diff changeset
    99
            //du pourcentage de proximité plus un, fois le nombre de dizaines d'images seront affichées.
37
bastiena
parents: 27
diff changeset
   100
            //return (((int)proximity / 10) + 1) * ((int)N / 2);
bastiena
parents: 27
diff changeset
   101
            return ((int)proximity / 10) * ((int)N / 10);
15
4b78f179e7ce Middleware :
bastiena
parents:
diff changeset
   102
        }
4b78f179e7ce Middleware :
bastiena
parents:
diff changeset
   103
    }
4b78f179e7ce Middleware :
bastiena
parents:
diff changeset
   104
}