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); }
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)); }
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; }