public Gesture(DateTime timestamp, double magnitude, GestureID id, Joint guestureSource) { this._timestamp = timestamp; this._magnitude = magnitude; this._id = id; this._guestureSource = guestureSource; }
public Gesture track(SkeletonData trackSkeleton, Joint trackJoint, double elevationAngle) { //Guesture guesture = null; double theta = elevationAngle * Math.PI / 180; if (positions.Count < trackSkeleton.Joints.Count) { foreach (Joint j in trackSkeleton.Joints) { if (!positions.ContainsKey(j)) { Microsoft.Research.Kinect.Nui.Vector newPosition = new Microsoft.Research.Kinect.Nui.Vector(); newPosition.W = j.Position.W; newPosition.X = j.Position.X; newPosition.Y = (float)(j.Position.Y * Math.Cos(theta) + j.Position.Z * Math.Sin(theta)); newPosition.Z = (float)(j.Position.Z * Math.Cos(theta) - j.Position.Y * Math.Sin(theta)); RotationalArray <Microsoft.Research.Kinect.Nui.Vector> jointPositions = new RotationalArray <Microsoft.Research.Kinect.Nui.Vector>(interval, 0); jointPositions.Add(newPosition); positions.Add(j, jointPositions); } } } else { foreach (Joint j in trackSkeleton.Joints) { for (int i = 0; i < positions.Keys.Count; i++) { Joint k = positions.Keys.ElementAt(i); if (j.ID == k.ID) { Microsoft.Research.Kinect.Nui.Vector newPosition = new Microsoft.Research.Kinect.Nui.Vector(); newPosition.W = j.Position.W; newPosition.X = j.Position.X; newPosition.Y = (float)(j.Position.Y * Math.Cos(theta) + j.Position.Z * Math.Sin(theta)); newPosition.Z = (float)(j.Position.Z * Math.Cos(theta) - j.Position.Y * Math.Sin(theta)); positions[k].Add(newPosition); if (k.ID == trackJoint.ID && positions[k].GetFirst().X != 0) { Microsoft.Research.Kinect.Nui.Vector velocityVector = new Microsoft.Research.Kinect.Nui.Vector(); velocityVector.X = positions[k].GetLast().X - positions[k].GetFirst().X; velocityVector.Y = positions[k].GetLast().Y - positions[k].GetFirst().Y; velocityVector.Z = positions[k].GetLast().Z - positions[k].GetFirst().Z; velocityVector.W = positions[k].GetLast().W - positions[k].GetFirst().W; guesture = guessGuesture(velocityVector, trackJoint, xThreshold, yThreshold, zThreshold); if (guesture.id == previousGuesture) { lockout = true; } else { lockout = false; previousGuesture = guesture.id; } } break; } } } } if (!lockout) { return(guesture); } else { return(new Gesture(DateTime.Now, 0, GestureID.Invalid, trackJoint)); } }