public static double Compare(JointRotation firstJoint, JointRotation secondJoint)
        {
            Vector4 mainQuaternion = new Vector4();
            mainQuaternion.X = firstJoint.X;
            mainQuaternion.Y = firstJoint.Y;
            mainQuaternion.Z = firstJoint.Z;
            mainQuaternion.W = firstJoint.W;

            Vector4 secondaryQuaternion = new Vector4();
            secondaryQuaternion.X = secondJoint.X;
            secondaryQuaternion.Y = secondJoint.Y;
            secondaryQuaternion.Z = secondJoint.Z;
            secondaryQuaternion.W = secondJoint.W;

            double distanceX = mainQuaternion.X - secondaryQuaternion.X;
            double distanceY = mainQuaternion.Y - secondaryQuaternion.Y;
            double distanceZ = mainQuaternion.Z - secondaryQuaternion.Z;
            double distanceW = mainQuaternion.W - secondaryQuaternion.W;

            double similarity = distanceX*distanceX +
                distanceY * distanceY +
                distanceZ * distanceZ +
                distanceW * distanceW;

            return similarity;
        }
        public static double CompareQuaternions(Vector4 mainQuaternion, Vector4 secondaryQuaternion)
        {
            JointRotation newMainQuaternion = new JointRotation(mainQuaternion.X, mainQuaternion.Y, mainQuaternion.Z, mainQuaternion.W);
            JointRotation newSecondaryQuaternion = new JointRotation(secondaryQuaternion.X, secondaryQuaternion.Y, secondaryQuaternion.Z, secondaryQuaternion.W);

            return CompareQuaternions(newMainQuaternion, newSecondaryQuaternion);
        }
Exemplo n.º 3
0
        public static double Compare(JointRotation firstJoint, JointRotation secondJoint)
        {
            Vector4 mainQuaternion = new Vector4();

            mainQuaternion.X = firstJoint.X;
            mainQuaternion.Y = firstJoint.Y;
            mainQuaternion.Z = firstJoint.Z;
            mainQuaternion.W = firstJoint.W;

            Vector4 secondaryQuaternion = new Vector4();

            secondaryQuaternion.X = secondJoint.X;
            secondaryQuaternion.Y = secondJoint.Y;
            secondaryQuaternion.Z = secondJoint.Z;
            secondaryQuaternion.W = secondJoint.W;

            double distanceX = mainQuaternion.X - secondaryQuaternion.X;
            double distanceY = mainQuaternion.Y - secondaryQuaternion.Y;
            double distanceZ = mainQuaternion.Z - secondaryQuaternion.Z;
            double distanceW = mainQuaternion.W - secondaryQuaternion.W;

            double similarity = distanceX * distanceX +
                                distanceY * distanceY +
                                distanceZ * distanceZ +
                                distanceW * distanceW;

            return(similarity);
        }
Exemplo n.º 4
0
        public static double CompareQuaternions(Vector4 mainQuaternion, Vector4 secondaryQuaternion)
        {
            JointRotation newMainQuaternion      = new JointRotation(mainQuaternion.X, mainQuaternion.Y, mainQuaternion.Z, mainQuaternion.W);
            JointRotation newSecondaryQuaternion = new JointRotation(secondaryQuaternion.X, secondaryQuaternion.Y, secondaryQuaternion.Z, secondaryQuaternion.W);


            return(CompareQuaternions(newMainQuaternion, newSecondaryQuaternion));
        }
Exemplo n.º 5
0
        public static double CompareQuaternions(JointRotation mainQuaternion, JointRotation secondaryQuaternion)
        {
            //(x1-x2)^2 + (y1-y2)^2 + (z1-z2)^2 + (w1 - w2)^2

            double distanceX = mainQuaternion.X - secondaryQuaternion.X;
            double distanceY = mainQuaternion.Y - secondaryQuaternion.Y;
            double distanceZ = mainQuaternion.Z - secondaryQuaternion.Z;
            double distanceW = mainQuaternion.W - secondaryQuaternion.W;

            double similarity =
                distanceX * distanceX +
                distanceY * distanceY +
                distanceZ * distanceZ +
                distanceW * distanceW;

            return(similarity);
        }
        public static double CompareQuaternions(JointRotation mainQuaternion, JointRotation secondaryQuaternion)
        {
            //(x1-x2)^2 + (y1-y2)^2 + (z1-z2)^2 + (w1 - w2)^2

            double distanceX = mainQuaternion.X - secondaryQuaternion.X;
            double distanceY = mainQuaternion.Y - secondaryQuaternion.Y;
            double distanceZ = mainQuaternion.Z - secondaryQuaternion.Z;
            double distanceW = mainQuaternion.W - secondaryQuaternion.W;

            double similarity =
                distanceX * distanceX +
                distanceY * distanceY +
                distanceZ * distanceZ +
                distanceW * distanceW;

            return similarity;
        }
        private static ImportedSkeleton CalculateSkeletonDerivative(List<ImportedSkeleton> query, int index, List<JointType> mostInformativeJoints)
        {
            var skeletonToReturn = new ImportedSkeleton();
            if (index < query.Count - 1)
            {
                foreach (var jointType in mostInformativeJoints)
                {

                    var currentMinusPrev = new JointRotation(
                        query[index].HiararchicalQuaternions[jointType].X - query[index - 1].HiararchicalQuaternions[jointType].X,
                        query[index].HiararchicalQuaternions[jointType].Y - query[index - 1].HiararchicalQuaternions[jointType].Y,
                        query[index].HiararchicalQuaternions[jointType].Z - query[index - 1].HiararchicalQuaternions[jointType].Z,
                        query[index].HiararchicalQuaternions[jointType].W - query[index - 1].HiararchicalQuaternions[jointType].W);

                    var nextMinusPrevDividedByTwo = new JointRotation(
                        (query[index + 1].HiararchicalQuaternions[jointType].X - query[index - 1].HiararchicalQuaternions[jointType].X) / 2,
                        (query[index + 1].HiararchicalQuaternions[jointType].Y - query[index - 1].HiararchicalQuaternions[jointType].Y) / 2,
                        (query[index + 1].HiararchicalQuaternions[jointType].Z - query[index - 1].HiararchicalQuaternions[jointType].Z) / 2,
                        (query[index + 1].HiararchicalQuaternions[jointType].W - query[index - 1].HiararchicalQuaternions[jointType].W) / 2);

                    var calculatedDerivative = new JointRotation(
                        (currentMinusPrev.X + nextMinusPrevDividedByTwo.X) / 2,
                        (currentMinusPrev.Y + nextMinusPrevDividedByTwo.Y) / 2,
                        (currentMinusPrev.Z + nextMinusPrevDividedByTwo.Z) / 2,
                        (currentMinusPrev.W + nextMinusPrevDividedByTwo.W) / 2
                        );

                    skeletonToReturn.HiararchicalQuaternions[jointType] = calculatedDerivative;

                }
            }
            return skeletonToReturn;
        }