Exemplo n.º 1
0
        private List <DataPosition> FiltreSurDonnees(List <ExerciceEvaluation> exoEvalList, List <DataPosition> tempDataFilted, ref SingletonReeducation ValeurReeducation, ref List <DataPosition> tempData)
        {
            //Filtres sur les données en entrées
            if (exoEvalList[0].TypeEval == ExerciceEvalTypes.Mouvement)
            {
                ExerciceMouvement ef = (ExerciceMouvement)exoEvalList[0];
                if (ef.TypeDroite == DroiteType.Vertical)    //target
                {
                    tempDataFilted = Ax_Filter.Filtre125Hz(postTempData);
                }
                else
                {
                    TraitementFiltre(ref tempDataFilted);
                }
            }
            else
            {
                TraitementFiltre(ref tempDataFilted);
            }

            //On supprime les positions en trop
            tempDataFilted.RemoveRange(0, 10);
            if (exoEvalList[0].TypeEval == ExerciceEvalTypes.Mouvement)
            {
                ExerciceMouvement ef = (ExerciceMouvement)exoEvalList[0];
                if (ef.TypeDroite == DroiteType.Vertical)
                {
                    if (tempDataFilted.Count >= 50)
                    {
                        tempDataFilted.RemoveRange((tempDataFilted.Count - 50), 50);
                    }
                    ValeurReeducation.StartStop = true;
                    tempData.Clear();
                }
                else
                {
                    tempDataFilted.RemoveRange((tempDataFilted.Count - 10), 10);
                }
            }
            else
            {
                tempDataFilted.RemoveRange((tempDataFilted.Count - 10), 10);
            }
            return(tempDataFilted);
        }
Exemplo n.º 2
0
        public void DataAfterEvaluation(ref List <ExerciceEvaluation> exoEvalList, ref ExerciceEvaluation exo, ref SingletonReeducation ValeurReeducation, ref List <DataPosition> tempData)
        {
            tempDataFilted = new List <DataPosition>();
            if (tempData.Count != 0)
            {
                VitMoy     = 0.0;
                resultDist = 0.0;
                Stra       = 0.0;
                SpeedMet   = 0.0;
                JerkM      = 0.0;
                Ampli      = 0.0;
                Presi      = 0.0;
                VitMax     = 0.0;

                //Filtres
                tempDataFilted = FiltreSurDonnees(exoEvalList, tempDataFilted, ref ValeurReeducation, ref tempData);

                //Calculs

                Calculs(exoEvalList, tempDataFilted, ref ValeurReeducation);

                if (cycleInfo == cycleTot) // Vérifier si la moyenne est complète + RAZ pour next cycle
                {
                    CalculMoyennes();      //On calcule les moyennes

                    if (exoEvalList[0].TypeExercice == ExerciceTypes.Evaluation)
                    {
                        if (exoEvalList[0].TypeEval == ExerciceEvalTypes.Forme)
                        {
                            ExerciceForme ef = (ExerciceForme)exoEvalList[0];
                            if (ef.TypeForme == FormeType.Carré)
                            {
                                exo = new Square(cycleTot, VitMoy, tabVitMoy, VitMax, tabVitMax, SpeedMet, tabSpeedMet, JerkM, tabJerkM, Presi, tabPresi);
                            }

                            else
                            {
                                exo = new Circle(cycleTot, VitMoy, tabVitMoy, VitMax, tabVitMax, SpeedMet, tabSpeedMet, JerkM, tabJerkM, Presi, tabPresi);
                            }
                        }

                        else
                        {
                            ExerciceMouvement ef = (ExerciceMouvement)exoEvalList[0];
                            if (ef.TypeDroite == DroiteType.VerticalLong)//FreeAmpl
                            {
                                exo = new FreeAmplitude(cycleTot, VitMoy, tabVitMoy, VitMax, tabVitMax, SpeedMet, tabSpeedMet, JerkM, tabJerkM, Stra, tabStra, Ampli, tabCoordYMax);
                            }
                            else
                            {
                                exo = new Target(cycleTot, VitMoy, tabVitMoy, VitMax, tabVitMax, SpeedMet, tabSpeedMet, JerkM, tabJerkM, Stra, tabStra, Presi, tabPresi);
                            }
                        }
                    }
                    CleanCycle(ref tempData); //On clean le cycle
                }
            }
        }
Exemplo n.º 3
0
        private void Calculs(List <ExerciceEvaluation> exoEvalList, List <DataPosition> tempDataFilted, ref SingletonReeducation ValeurReeducation)
        {
            //Calculs
            tabVitMoy[cycleInfo]     = Ax_Vitesse.VitesseMoy(tempDataFilted, ref VitMax, 0.008); // Calc de la vitesse moyenne
            tabVitMax[cycleInfo]     = VitMax;
            tabJerkM[cycleInfo]      = Ax_Vitesse.JerkMet(tempDataFilted, VitMax, 0.008);        // Calc du Jerk
            tabResultDist[cycleInfo] = Ax_Position.Distance(tempDataFilted);                     // Calc de la distance réelle
            tabDoub[0] = tabResultDist[cycleInfo];

            double ampStrain = 0.0;
            double coordYMax = 0.0;

            if (exoEvalList[0].TypeEval == ExerciceEvalTypes.Mouvement)
            {
                ExerciceMouvement ef1 = (ExerciceMouvement)exoEvalList[0];
                if (ef1.TypeDroite == DroiteType.VerticalLong)                              //FreeAmplitude
                {
                    ampStrain = FreeAmplitude.CalAmpliFree(tempDataFilted, ref coordYMax);  // special aller/retour :p
                    tabCoordYMax[cycleInfo] = coordYMax;
                    tabStra[cycleInfo]      = Ax_Position.Straightness(ampStrain, tabDoub); // Calc de la Straightness
                }
                else if (ef1.TypeDroite == DroiteType.Vertical)
                {
                    ampStrain           = Target.CalAmpli(tempDataFilted);              // Calc de l'amplitude
                    tabStra[cycleInfo]  = Ax_Position.Straightness(ampStrain, tabDoub); // Calc de la Straightness
                    tabPresi[cycleInfo] = Target.PresciTarget(tempDataFilted);          // calc precision target droite
                }
            }
            else if (exoEvalList[0].TypeEval == ExerciceEvalTypes.Forme)
            {
                ExerciceForme ef = (ExerciceForme)exoEvalList[0];
                if (ef.TypeForme == FormeType.Cercle)
                {
                    DataPosition centre = new DataPosition(XCENTRE, YCENTRE); // 37.0 46.0
                    double       Rayon  = 4.0;
                    tabPresi[cycleInfo] = Circle.PreciCercle(tempDataFilted, centre, Rayon);
                }
                else
                {
                    DataPosition centre = new DataPosition(XCENTRE, YCENTRE);
                    double       longCot = 6.0, Orientation = 0.0;
                    tabPresi[cycleInfo] = Square.PreciCarre(tempDataFilted, centre, longCot, Orientation);
                }
            }

            tabSpeedMet[cycleInfo] = tabVitMoy[cycleInfo] / tabVitMax[cycleInfo];               // Calc de la Speed Metrique
            cycleInfo++;
        }
Exemplo n.º 4
0
        private void DetectionCycle(PositionDataModel positions, List <ExerciceEvaluation> exoEvalList, ref SingletonReeducation ValeurReeducation, ref List <DataPosition> tempData)
        {
            if (exoEvalList[0].TypeEval == ExerciceEvalTypes.Mouvement)
            {
                ExerciceMouvement ef = (ExerciceMouvement)exoEvalList[0];
                if (ef.TypeDroite == DroiteType.Vertical)//Target
                {
                    Target ExMvtsRythmiques = (Target)exoEvalList[0];
                    ExMvtsRythmiques.DecoupeCycle(positions, ref exoEvalList, ref ValeurReeducation, ref tempData, ref dectectINIT);
                }

                else if (ef.TypeDroite == DroiteType.VerticalLong)//FreeAmplitude
                {
                    Init(positions, XINIT, YINITFREEAMP, DISTFREEAMP, ref tempData);
                    longdroitetrou = true;
                }
            }
            else if (exoEvalList[0].TypeEval == ExerciceEvalTypes.Forme)//Ex de type Forme
            {
                ExerciceForme exF = (ExerciceForme)exoEvalList[0];
                if (exF.TypeForme == FormeType.Cercle)
                {
                    Init(positions, XINIT, YINITCERCLE, DIST, ref tempData);
                    longdroitetrou = true;
                }
                else if (exF.TypeForme == FormeType.Carré)
                {
                    Init(positions, XINIT, YINITCARRE, DIST, ref tempData);
                    longdroitetrou = true;
                    carreCycle     = true;
                }
            }
        }
Exemplo n.º 5
0
        private void EnregistrerCycle(PositionDataModel positions, ref SingletonReeducation ValeurReeducation, ref List <DataPosition> tempData)
        {
            if ((positions.PositionY / 100.0 < DETECT_CYCLE))
            {
                zzzTime = true;
            }

            if ((positions.PositionY / 100.0 >= DETECT_CYCLE) && (positions.PositionY / 100.0 > tempsMvtLongDroite.Y) && zzzTime == true)//En Cycle
            {
                _tabtempsMvtLongDroite.Add(new DataPosition(positions.PositionX / 100.0, positions.PositionY / 100.0));
                if (zzzIndex == false)
                {
                    tab10Index[0, CountCycle] = tempData.Count - 1;   // enregistrement index debut
                    zzzIndex = true;
                }
                cycleActif = true;
            }
            else if ((positions.PositionY / 100.0 < DETECT_CYCLE) && (positions.PositionY / 100.0 < tempsMvtLongDroite.Y) && cycleActif == true)//Fin de cycle
            {
                if (_tabtempsMvtLongDroite.Count != 0)
                {
                    DataPosition min = new DataPosition();
                    min.X = _tabtempsMvtLongDroite[0].X;
                    min.Y = _tabtempsMvtLongDroite[0].Y;

                    if (carreCycle == false)
                    {
                        for (int i = 0; i < _tabtempsMvtLongDroite.Count; i++)
                        {
                            if (_tabtempsMvtLongDroite[i].Y > min.Y)
                            {
                                min.X = _tabtempsMvtLongDroite[i].X;
                                min.Y = _tabtempsMvtLongDroite[i].Y;
                            }
                        }
                    }

                    _tabtempsMvtLongDroite.Clear();                 // clear tableau de detection de fin de cycle
                    tab10Index[1, CountCycle] = tempData.Count - 1; // enregistrement index fin
                    tab10Index[2, CountCycle] = min.X;              // enregistrement index fin
                    tab10Index[3, CountCycle] = min.Y;              // enregistrement index fin

                    zzzIndex = false;

                    CountCycle++;                            // incrementation compteur de cycle
                    Messenger.Default.Send(CountCycle, "CompteurCycle");
                    if (CountCycle >= 10)                    // TODO : ici pour changer
                    {
                        ValeurReeducation.StartStop = false; // activer le post traitement des données
                        longdroitetrou = false;
                        cycleTot       = CountCycle;
                        Messenger.Default.Send(CountCycle, "CompteurCycle");
                        CountCycle = 0; // RAZ du compteur de cycle
                        Messenger.Default.Send(CountCycle, "CompteurCycle");
                        for (int i = 0; i < tempData.Count; i++)
                        {
                            postTempData.Add(new DataPosition(tempData[i].X, tempData[i].Y));
                        }
                    }
                    cycleActif = false;
                }
            }
            longdroitetrou       = false;
            tempsMvtLongDroite.X = positions.PositionX / 100.0;
            tempsMvtLongDroite.Y = positions.PositionY / 100.0;
        }
Exemplo n.º 6
0
        public void DecoupageCycle(PositionDataModel positions, ref List <ExerciceEvaluation> exoEvalList, ref SingletonReeducation ValeurReeducation, ref List <DataPosition> tempData)
        {
            DetectionCycle(positions, exoEvalList, ref ValeurReeducation, ref tempData);

            if (longdroitetrou == true)
            {
                EnregistrerCycle(positions, ref ValeurReeducation, ref tempData);
            }

            //TODO : il faudra changer ca pour le démarrer après la zone de confort !
            if (dectectSTART == false)
            {
                tempData.Add(new DataPosition(positions.PositionX / 100.0, positions.PositionY / 100.0));     // TODO : enregistrement data
                AddTxtLine(positionXYforceXY[0], positionXYforceXY[1], positionXYforceXY[2] / 100.0, positionXYforceXY[3] / 100.0);
            }
        }
Exemplo n.º 7
0
        public bool DistanceTab(ref List <ExerciceEvaluation> exoEvalList, ref SingletonReeducation ValeurReeducation, ref List <DataPosition> tempData)
        {
            double moyX     = 0.0;
            double moyY     = 0.0;
            double distance = 0.0;

            for (int i = 0; i < _detectionStop.Count; i++)
            {
                moyX += _detectionStop[i].X;
                moyY += _detectionStop[i].Y;
            }
            moyX    /= _detectionStop.Count;
            moyY    /= _detectionStop.Count;
            distance = Distance(moyX, moyY, _detectionStop[_detectionStop.Count - 1].X, _detectionStop[_detectionStop.Count - 1].Y);
            //distance /= 100.0;
            if (distance < DetectStopAmp)   // default : 0.8
            {
                Debug.Print(Convert.ToString(distance));


                Messenger.Default.Send <bool>(false, "MainViewModel");
                CountCycle++;
                Messenger.Default.Send(CountCycle, "CompteurCycle");
                if (CountCycle < 10)    // TODO : ici pour changer
                {
                    Application.Current.Dispatcher.Invoke(new Action(() =>
                    {
                        Messenger.Default.Send(CommandCodes.mod_init_traj, "MessageCommand");
                    }), DispatcherPriority.Normal);

                    _carre = true;
                    exoEvalList[0].dectectSTART = false;
                    ValeurReeducation.StartStop = false;
                    postTempData.Clear();
                    for (int i = 0; i < tempData.Count; i++)
                    {
                        postTempData.Add(new DataPosition(tempData[i].X, tempData[i].Y));
                    }
                }
                else
                {
                    Application.Current.Dispatcher.Invoke(new Action(() =>
                    {
                        Messenger.Default.Send(CommandCodes.mod_init_traj, "MessageCommand");
                    }), DispatcherPriority.Normal);

                    exoEvalList[0].dectectSTART = false;
                    _carre   = false;
                    cycleTot = CountCycle;
                    ValeurReeducation.StartStop = false;
                    postTempData.Clear();
                    for (int i = 0; i < tempData.Count; i++)
                    {
                        postTempData.Add(new DataPosition(tempData[i].X, tempData[i].Y));
                    }
                    CountCycle = 0;
                    Messenger.Default.Send(CountCycle, "CompteurCycle");
                }
            }
            return(true);
        }
Exemplo n.º 8
0
 public void DecoupeCycle(PositionDataModel positions, ref List <ExerciceEvaluation> exoEvalList, ref SingletonReeducation ValeurReeducation, ref List <DataPosition> tempData, ref bool dectectINIT)
 {
     dectectSTART = false;
     if (dectectSTOP == true)//Pour détecter quand le mouvement s'arrête
     {
         _detectionStop.Add(new DataPosition(positions.PositionX / 100.0, positions.PositionY / 100.0));
         if (_detectionStop.Count >= endPoints)
         {
             DistanceTab(ref exoEvalList, ref ValeurReeducation, ref tempData);//Si les 50 derniers points sont compris dans un périmètre (default 0.8), on considère que le mouvement est terminé
             _detectionStop.Clear();
         }
     }
     else
     {
         Init(positions, XINIT, YINITTARGET, DIST, ref tempData);
         longdroitetrou = true;
     }
 }