Exemplo n.º 1
0
        // constructor
        public AvatarSimilarity(AvatarContainer selfIn, AvatarContainer teacherIn, BodyWeightsType bodyNrIn, double penaltyIn, bool activateKalmanIn, double kalmanQIn, double kalmanRIn)
        {
            // assign
            ///////////////////////////////////////////////////////////////////////////////////
            self           = selfIn;
            teacher        = teacherIn;
            bodyNr         = bodyNrIn;
            penalty        = penaltyIn;
            kalmanQ        = kalmanQIn;
            kalmanR        = kalmanRIn;
            stickNumber    = 0;
            activateKalman = activateKalmanIn;

            // initialize
            ///////////////////////////////////////////////////////////////////////////////////

            // define all stick names (should be actually moved to a parameter file)
            //stickNames = SimilarityConst.StickNames;
            stickNumber = SimilarityConst.StickNumber;

            // Initialize adaptive weighting
            stickWeight = Enumerable.Repeat(1.0, stickNumber).ToList();

            // weight of each stick
            stickWeightBody = SimilarityConst.GetStickWeights(bodyNr);


            // correct each default stick weight
            stickWeightAdapt = Enumerable.Repeat(1.0, stickNumber).ToList();

            // calculate final stick weight
            stickWeightTotal = 0.0;
            for (int i = 0; i < stickNumber; i++)
            {
                stickWeightTotal += stickWeightBody[i] * stickWeightAdapt[i];
            }

            // set default similarity each stick
            similarityStick = Enumerable.Repeat(0.0, stickNumber).ToList();

            // generate kalman filters
            kalmanFilter = new List <KalmanFilter>(new KalmanFilter[stickNumber]);
            for (int i = 0; i < stickNumber; i++)
            {
                kalmanFilter[i] = new KalmanFilter(kalmanQ, kalmanR);
                kalmanFilter[i].Reset(1.0);
            }


            // total score
            totalScore = 0.0;
        }
Exemplo n.º 2
0
        public void UpdatePart(BodyWeightsType bodyNrIn, List <double> weights_score)
        {
            // update a color for a specific body part bodyNrIn. Sets grad color to "1" and blue to "0"
            List <double> weights = SimilarityConst.GetStickWeights(bodyNrIn);

            for (var i = 0; i < weights.Count; i++)
            {
                if (weights[i] == 0)
                {
                    SetColor(stickparts[i], neutralColor);
                }
                if (weights[i] == 1)
                {
                    set_grad_color(stickparts[i], incorrectColor, correctColor, weights_score[i]);
                }
            }
        }
Exemplo n.º 3
0
        public static List <double> GetStickWeights(BodyWeightsType weightType)
        {
            switch (weightType)
            {
            case BodyWeightsType.TOTAL:
                return(Enumerable.Repeat(1.0, StickNumber).ToList());

            case BodyWeightsType.TOP:
                return(new List <double>(new double[] {
                    0.0,
                    0.0,
                    0.0,
                    0.0,
                    0.0,
                    0.0,
                    0.0,
                    0.0,
                    0.0,
                    0.0,
                    0.0,
                    1.0,
                    1.0,
                    1.0,
                    1.0,
                    1.0,
                    1.0,
                    1.0,
                    1.0,
                    1.0,
                    0.0,
                    0.0,
                    0.0,
                    0.0,
                    0.0,
                    0.0,
                    0.0,
                    0.0,
                    0.0,
                    0.0,
                }));

            case BodyWeightsType.MIDDLE:
                return(new List <double>(new double[] {
                    0.0,
                    0.0,
                    1.0,
                    1.0,
                    0.0,
                    0.0,
                    1.0,
                    1.0,
                    1.0,
                    1.0,
                    1.0,
                    0.0,
                    0.0,
                    1.0,
                    0.0,
                    0.0,
                    0.0,
                    0.0,
                    1.0,
                    1.0,
                    1.0,
                    1.0,
                    1.0,
                    1.0,
                    1.0,
                    1.0,
                    0.0,
                    0.0,
                    0.0,
                    0.0,
                }));

            case BodyWeightsType.BOTTOM:
                return(new List <double>(new double[] {
                    1.0,
                    1.0,
                    0.0,
                    0.0,
                    1.0,
                    1.0,
                    0.0,
                    0.0,
                    0.0,
                    0.0,
                    0.0,
                    0.0,
                    0.0,
                    0.0,
                    0.0,
                    0.0,
                    0.0,
                    0.0,
                    0.0,
                    0.0,
                    0.0,
                    0.0,
                    0.0,
                    0.0,
                    0.0,
                    0.0,
                    1.0,
                    1.0,
                    1.0,
                    1.0
                }));

            default:
                return(Enumerable.Repeat(0.0, StickNumber).ToList());
            }
        }