private void DrawSkeleton(object sender, RoutedEventArgs e)
        {
            System.Windows.Forms.FolderBrowserDialog dialog = new System.Windows.Forms.FolderBrowserDialog();
            dialog.Description = "请选择动作数据文件夹路径";
            if (dialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                string foldPath              = dialog.SelectedPath;
                String dataFilePath          = foldPath + "/skeletonData.txt";
                String skeletonImageFoldPath = foldPath + "/skeletonFrame";

                if (!File.Exists(dataFilePath))
                {
                    MessageBox.Show("文件 " + dataFilePath + " 不存在.");
                    return;
                }
                if (!Directory.Exists(skeletonImageFoldPath))
                {
                    Directory.CreateDirectory(skeletonImageFoldPath);
                }

                Thread thread = new Thread(() => {
                    using (StreamReader sr = new StreamReader(dataFilePath))
                    {
                        String line;
                        while ((line = sr.ReadLine()) != null)
                        {
                            MySkeleton skeleton = CommonUtil.jsonStrToMySkeleton(line);
                        }
                    }
                    Dispatcher.Invoke(() => MessageBox.Show("图片绘制完成"));
                });
                thread.IsBackground = false;
                thread.Start();
            }
        }
예제 #2
0
    public Vector3 createJoint(MySkeleton skel, int firstJoint, int secondJoint, Kinect.JointType jointToMove, int index)
    {
        float Xtrans = translateX(skel, firstJoint, secondJoint, index);
        float Ytrans = translateY(skel, firstJoint, secondJoint, index);
        float Ztrans = translateZ(skel, firstJoint, secondJoint, index);
        //		Debug.Log ("x transition: " + Xtrans+" ytansitiion: "+ Ytrans+" z transition: "+Ztrans);

        Vector3 Position = new Vector3 ((float)(skel.Position[(int)jointToMove].x - Xtrans), (float)(skel.Position[(int)jointToMove].y - Ytrans),
                                        (float)(skel.Position[(int)jointToMove].z - Ztrans));
        return Position;
    }
예제 #3
0
 public void OpenSkeleton(string path)
 {
     using (CsvFileReader reader = new CsvFileReader(path))
     {
         sktList = new List <MySkeleton>();
         CsvRow row = new CsvRow();
         // one frame skeleton
         while (reader.ReadRow(row))
         {
             var skt = new MySkeleton(14);
             if (row[0].ToLower().Trim().Equals("untracked"))
             {
                 skt.Tracked = false;
             }
             else
             {
                 int step = 7;
                 // one joint
                 for (int i = 0; i < row.Count; i += step)
                 {
                     var type  = i / step;
                     var joint = new MyJoint()
                     {
                         Pos3D = new SkeletonPoint()
                         {
                             X = Convert.ToSingle(row[i]),
                             Y = Convert.ToSingle(row[i + 1]),
                             Z = Convert.ToSingle(row[i + 2])
                         },
                         PosColor = new System.Drawing.Point()
                         {
                             X = (int)Convert.ToSingle(row[i + 3]),
                             Y = (int)Convert.ToSingle(row[i + 4])
                         },
                         PosDepth = new System.Drawing.Point()
                         {
                             X = (int)Convert.ToSingle(row[i + 5]),
                             Y = (int)Convert.ToSingle(row[i + 6])
                         }
                     };
                     skt[type] = joint;
                 }
             }
             sktList.Add(skt);
         }
     }
     //foreach (var mySkeleton in sktList)
     //{
     //    Console.Write(mySkeleton[MyJointType.Head].PosColor.X);
     //}
 }
예제 #4
0
        public static double computeSimilarity(MySkeleton skel1, MySkeleton skel2)
        {
            double[][] vector1 = computeVectors(skel1);
            double[][] vector2 = computeVectors(skel2);

            double similarity = 0;

            for (int i = 0; i < vector1.Length; i++)
            {
                similarity += (1 - computeCosineSimilarity(vector1[i][0], vector1[i][1], vector1[i][2], vector2[i][0], vector2[i][1], vector2[i][2]));
            }

            return(similarity / 4);
        }
예제 #5
0
        public static List <MySkeleton> meanFilter(List <MySkeleton> list)
        {
            int N = 5;

            int d = (N - 1) / 2;
            List <MySkeleton> result = new List <MySkeleton>();

            for (int i = 0; i < list.Count; i++)
            {
                int start = Math.Max(0, i - d), end = Math.Min(list.Count - 1, i + d), count = end - start + 1;
                Dictionary <JointType, float[]> data = new Dictionary <JointType, float[]>();
                for (int j = start; j <= end; j++)
                {
                    foreach (KeyValuePair <JointType, MyJoint> pair in list[j].Joints)
                    {
                        if (!data.ContainsKey(pair.Key))
                        {
                            data[pair.Key] = new float[] { pair.Value.Position.X, pair.Value.Position.Y, pair.Value.Position.Z };
                        }
                        else
                        {
                            data[pair.Key][0] += pair.Value.Position.X;
                            data[pair.Key][1] += pair.Value.Position.Y;
                            data[pair.Key][2] += pair.Value.Position.Z;
                        }
                    }
                }

                MySkeleton skel = new MySkeleton();
                foreach (KeyValuePair <JointType, float[]> pair in data)
                {
                    SkeletonPoint point = new SkeletonPoint();
                    point.X = data[pair.Key][0] / count;
                    point.Y = data[pair.Key][1] / count;
                    point.Z = data[pair.Key][2] / count;
                    skel.Joints[pair.Key] = new MyJoint(list[i].Joints[pair.Key].JointType, point, list[i].Joints[pair.Key].TrackingState);
                }
                result.Add(skel);
            }

            return(result);
        }
예제 #6
0
        public static double[][] computeVectors(MySkeleton skeleton)
        {
            MyJoint joint0 = skeleton.Joints[JointType.ShoulderLeft];
            MyJoint joint1 = skeleton.Joints[JointType.ElbowLeft];

            double[] vectorShoulderElbowLeft = computeVector(joint0, joint1);

            joint0 = skeleton.Joints[JointType.ElbowLeft];
            joint1 = skeleton.Joints[JointType.WristLeft];
            double[] vectorElbowWristLeft = computeVector(joint0, joint1);

            joint0 = skeleton.Joints[JointType.ShoulderRight];
            joint1 = skeleton.Joints[JointType.ElbowRight];
            double[] vectorShoulderElbowRight = computeVector(joint0, joint1);

            joint0 = skeleton.Joints[JointType.ElbowRight];
            joint1 = skeleton.Joints[JointType.WristRight];
            double[] vectorElbowWristRight = computeVector(joint0, joint1);


            return(new double[][] { vectorShoulderElbowLeft, vectorElbowWristLeft, vectorShoulderElbowRight, vectorElbowWristRight });
        }
예제 #7
0
        public static MySkeleton jsonStrToMySkeleton(String jsonStr)
        {
            MySkeleton skel = new MySkeleton();

            JSONArray array = new JSONArray(jsonStr);

            for (int i = 0; i < array.Length(); i++)
            {
                JSONObject jointObj      = array.GetJSONObject(i);
                JSONArray  positionArray = jointObj.GetJSONArray("Position");

                JointType          jointType     = jointTypeNameReverseMap[jointObj.GetString("JointType")];
                JointTrackingState trackingState = jointTrackingStateNameReverseMap[jointObj.GetString("TrackingState")];
                SkeletonPoint      position      = new SkeletonPoint();
                position.X = float.Parse(positionArray.GetString(0));
                position.Y = float.Parse(positionArray.GetString(1));
                position.Z = float.Parse(positionArray.GetString(2));

                skel.Joints[jointType] = new MyJoint(jointType, position, trackingState);
            }

            return(skel);
        }
예제 #8
0
    public MySkeleton resizeSkeleton(MySkeleton skel)
    {
        MySkeleton newSkeleton = new MySkeleton ();
        newSkeleton = skel;

        //spine
        newSkeleton.Position[(int)Kinect.JointType.SpineMid] = new Vector3Serializer(createJoint(newSkeleton, (int)Kinect.JointType.SpineBase, (int)Kinect.JointType.SpineMid, Kinect.JointType.SpineMid, 0));
        newSkeleton.Position[(int)Kinect.JointType.Neck] = new Vector3Serializer(createJoint(newSkeleton, (int)Kinect.JointType.SpineBase, (int)Kinect.JointType.SpineMid, Kinect.JointType.Neck, 0));
        newSkeleton.Position[(int)Kinect.JointType.Head] = new Vector3Serializer(createJoint(newSkeleton, (int)Kinect.JointType.SpineBase, (int)Kinect.JointType.SpineMid, Kinect.JointType.Head, 0));
        newSkeleton.Position[(int)Kinect.JointType.ShoulderLeft] = new Vector3Serializer(createJoint(newSkeleton, (int)Kinect.JointType.SpineBase, (int)Kinect.JointType.SpineMid, Kinect.JointType.ShoulderLeft, 0));
        newSkeleton.Position[(int)Kinect.JointType.ElbowLeft] = new Vector3Serializer(createJoint(newSkeleton, (int)Kinect.JointType.SpineBase, (int)Kinect.JointType.SpineMid, Kinect.JointType.ElbowLeft, 0));
        newSkeleton.Position[(int)Kinect.JointType.WristLeft] = new Vector3Serializer(createJoint(newSkeleton, (int)Kinect.JointType.SpineBase, (int)Kinect.JointType.SpineMid, Kinect.JointType.WristLeft, 0));
        newSkeleton.Position[(int)Kinect.JointType.HandLeft] = new Vector3Serializer(createJoint(newSkeleton, (int)Kinect.JointType.SpineBase, (int)Kinect.JointType.SpineMid, Kinect.JointType.HandLeft, 0));
        newSkeleton.Position[(int)Kinect.JointType.ShoulderRight] = new Vector3Serializer(createJoint(newSkeleton, (int)Kinect.JointType.SpineBase, (int)Kinect.JointType.SpineMid, Kinect.JointType.ShoulderRight, 0));
        newSkeleton.Position[(int)Kinect.JointType.ElbowRight] = new Vector3Serializer(createJoint(newSkeleton, (int)Kinect.JointType.SpineBase, (int)Kinect.JointType.SpineMid, Kinect.JointType.ElbowRight, 0));
        newSkeleton.Position[(int)Kinect.JointType.WristRight] = new Vector3Serializer(createJoint(newSkeleton, (int)Kinect.JointType.SpineBase, (int)Kinect.JointType.SpineMid, Kinect.JointType.WristRight, 0));
        newSkeleton.Position[(int)Kinect.JointType.HandRight] = new Vector3Serializer(createJoint(newSkeleton, (int)Kinect.JointType.SpineBase, (int)Kinect.JointType.SpineMid, Kinect.JointType.HandRight, 0));

        //shoulder center
        newSkeleton.Position[(int)Kinect.JointType.Neck] = new Vector3Serializer(createJoint(newSkeleton, (int)Kinect.JointType.SpineMid, (int)Kinect.JointType.Neck, Kinect.JointType.Neck, 1));
        newSkeleton.Position[(int)Kinect.JointType.Head] = new Vector3Serializer(createJoint(newSkeleton, (int)Kinect.JointType.SpineMid, (int)Kinect.JointType.Neck, Kinect.JointType.Head, 1));
        newSkeleton.Position[(int)Kinect.JointType.ShoulderLeft] = new Vector3Serializer(createJoint(newSkeleton, (int)Kinect.JointType.SpineMid, (int)Kinect.JointType.Neck, Kinect.JointType.ShoulderLeft, 1));
        newSkeleton.Position[(int)Kinect.JointType.ElbowLeft] = new Vector3Serializer(createJoint(newSkeleton, (int)Kinect.JointType.SpineMid, (int)Kinect.JointType.Neck, Kinect.JointType.ElbowLeft, 1));
        newSkeleton.Position[(int)Kinect.JointType.WristLeft] = new Vector3Serializer(createJoint(newSkeleton, (int)Kinect.JointType.SpineMid, (int)Kinect.JointType.Neck, Kinect.JointType.WristLeft, 1));
        newSkeleton.Position[(int)Kinect.JointType.HandLeft] = new Vector3Serializer(createJoint(newSkeleton, (int)Kinect.JointType.SpineMid, (int)Kinect.JointType.Neck, Kinect.JointType.HandLeft, 1));
        newSkeleton.Position[(int)Kinect.JointType.ShoulderRight] = new Vector3Serializer(createJoint(newSkeleton, (int)Kinect.JointType.SpineMid, (int)Kinect.JointType.Neck, Kinect.JointType.ShoulderRight, 1));
        newSkeleton.Position[(int)Kinect.JointType.ElbowRight] = new Vector3Serializer(createJoint(newSkeleton, (int)Kinect.JointType.SpineMid, (int)Kinect.JointType.Neck, Kinect.JointType.ElbowRight, 1));
        newSkeleton.Position[(int)Kinect.JointType.WristRight] = new Vector3Serializer(createJoint(newSkeleton, (int)Kinect.JointType.SpineMid, (int)Kinect.JointType.Neck, Kinect.JointType.WristRight, 1));
        newSkeleton.Position[(int)Kinect.JointType.HandRight] = new Vector3Serializer(createJoint(newSkeleton, (int)Kinect.JointType.SpineMid, (int)Kinect.JointType.Neck, Kinect.JointType.HandRight, 1));

        //head
        newSkeleton.Position[(int)Kinect.JointType.Head] = new Vector3Serializer(createJoint(newSkeleton, (int)Kinect.JointType.Neck, (int)Kinect.JointType.Head, Kinect.JointType.Head, 2));

        //shoulder left
        newSkeleton.Position[(int)Kinect.JointType.ShoulderLeft] = new Vector3Serializer(createJoint(newSkeleton, (int)Kinect.JointType.Neck, (int)Kinect.JointType.ShoulderLeft, Kinect.JointType.ShoulderLeft, 3));
        newSkeleton.Position[(int)Kinect.JointType.ElbowLeft] = new Vector3Serializer(createJoint(newSkeleton, (int)Kinect.JointType.Neck, (int)Kinect.JointType.ShoulderLeft, Kinect.JointType.ElbowLeft, 3));
        newSkeleton.Position[(int)Kinect.JointType.WristLeft] = new Vector3Serializer(createJoint(newSkeleton, (int)Kinect.JointType.Neck, (int)Kinect.JointType.ShoulderLeft, Kinect.JointType.WristLeft, 3));
        newSkeleton.Position[(int)Kinect.JointType.HandLeft] = new Vector3Serializer(createJoint(newSkeleton, (int)Kinect.JointType.Neck, (int)Kinect.JointType.ShoulderLeft, Kinect.JointType.HandLeft, 3));

        //elbow left
        newSkeleton.Position[(int)Kinect.JointType.ElbowLeft] = new Vector3Serializer(createJoint(newSkeleton, (int)Kinect.JointType.ShoulderLeft, (int)Kinect.JointType.ElbowLeft, Kinect.JointType.ElbowLeft, 4));
        newSkeleton.Position[(int)Kinect.JointType.WristLeft] = new Vector3Serializer(createJoint(newSkeleton, (int)Kinect.JointType.ShoulderLeft, (int)Kinect.JointType.ElbowLeft, Kinect.JointType.WristLeft, 4));
        newSkeleton.Position[(int)Kinect.JointType.HandLeft] = new Vector3Serializer(createJoint(newSkeleton, (int)Kinect.JointType.ShoulderLeft, (int)Kinect.JointType.ElbowLeft, Kinect.JointType.HandLeft, 4));

        //wrist left
        newSkeleton.Position[(int)Kinect.JointType.WristLeft] = new Vector3Serializer(createJoint(newSkeleton, (int)Kinect.JointType.ElbowLeft, (int)Kinect.JointType.WristLeft, Kinect.JointType.WristLeft, 5));
        newSkeleton.Position[(int)Kinect.JointType.HandLeft] = new Vector3Serializer(createJoint(newSkeleton, (int)Kinect.JointType.ElbowLeft, (int)Kinect.JointType.WristLeft, Kinect.JointType.HandLeft, 5));

        //hand left
        newSkeleton.Position[(int)Kinect.JointType.HandLeft] = new Vector3Serializer(createJoint(newSkeleton, (int)Kinect.JointType.WristLeft, (int)Kinect.JointType.HandLeft, Kinect.JointType.HandLeft, 6));

        //shoulder right
        newSkeleton.Position[(int)Kinect.JointType.ShoulderRight] = new Vector3Serializer(createJoint(newSkeleton, (int)Kinect.JointType.Neck, (int)Kinect.JointType.ShoulderRight, Kinect.JointType.ShoulderRight, 7));
        newSkeleton.Position[(int)Kinect.JointType.ElbowRight] = new Vector3Serializer(createJoint(newSkeleton, (int)Kinect.JointType.Neck, (int)Kinect.JointType.ShoulderRight, Kinect.JointType.ElbowRight, 7));
        newSkeleton.Position[(int)Kinect.JointType.WristRight] = new Vector3Serializer(createJoint(newSkeleton, (int)Kinect.JointType.Neck, (int)Kinect.JointType.ShoulderRight, Kinect.JointType.WristRight, 7));
        newSkeleton.Position[(int)Kinect.JointType.HandRight] = new Vector3Serializer(createJoint(newSkeleton, (int)Kinect.JointType.Neck, (int)Kinect.JointType.ShoulderRight, Kinect.JointType.HandRight, 7));

        //elbow right
        newSkeleton.Position[(int)Kinect.JointType.ElbowRight] = new Vector3Serializer(createJoint(newSkeleton, (int)Kinect.JointType.ShoulderRight, (int)Kinect.JointType.ElbowRight, Kinect.JointType.ElbowRight, 8));
        newSkeleton.Position[(int)Kinect.JointType.WristRight] = new Vector3Serializer(createJoint(newSkeleton, (int)Kinect.JointType.ShoulderRight, (int)Kinect.JointType.ElbowRight, Kinect.JointType.WristRight, 8));
        newSkeleton.Position[(int)Kinect.JointType.HandRight] = new Vector3Serializer(createJoint(newSkeleton, (int)Kinect.JointType.ShoulderRight, (int)Kinect.JointType.ElbowRight, Kinect.JointType.HandRight, 8));

        //wrist right
        newSkeleton.Position[(int)Kinect.JointType.WristRight] = new Vector3Serializer(createJoint(newSkeleton, (int)Kinect.JointType.ElbowRight, (int)Kinect.JointType.WristRight, Kinect.JointType.WristRight, 9));
        newSkeleton.Position[(int)Kinect.JointType.HandRight] = new Vector3Serializer(createJoint(newSkeleton, (int)Kinect.JointType.ElbowRight, (int)Kinect.JointType.WristRight, Kinect.JointType.HandRight, 9));

        //hand right
        newSkeleton.Position[(int)Kinect.JointType.HandRight] = new Vector3Serializer(createJoint(newSkeleton, (int)Kinect.JointType.WristRight, (int)Kinect.JointType.HandRight, Kinect.JointType.HandRight, 10));

        //hip left;
        newSkeleton.Position[(int)Kinect.JointType.HipLeft] = new Vector3Serializer(createJoint(newSkeleton, (int)Kinect.JointType.SpineBase, (int)Kinect.JointType.HipLeft, Kinect.JointType.HipLeft, 11));
        newSkeleton.Position[(int)Kinect.JointType.KneeLeft] = new Vector3Serializer(createJoint(newSkeleton, (int)Kinect.JointType.SpineBase, (int)Kinect.JointType.HipLeft, Kinect.JointType.KneeLeft, 11));
        newSkeleton.Position[(int)Kinect.JointType.AnkleLeft] = new Vector3Serializer(createJoint(newSkeleton, (int)Kinect.JointType.SpineBase, (int)Kinect.JointType.HipLeft, Kinect.JointType.AnkleLeft, 11));
        newSkeleton.Position[(int)Kinect.JointType.FootLeft] = new Vector3Serializer(createJoint(newSkeleton, (int)Kinect.JointType.SpineBase, (int)Kinect.JointType.HipLeft, Kinect.JointType.FootLeft, 11));
        //knee left
        newSkeleton.Position[(int)Kinect.JointType.KneeLeft] = new Vector3Serializer(createJoint(newSkeleton, (int)Kinect.JointType.HipLeft, (int)Kinect.JointType.KneeLeft, Kinect.JointType.KneeLeft, 12));
        newSkeleton.Position[(int)Kinect.JointType.AnkleLeft] = new Vector3Serializer(createJoint(newSkeleton, (int)Kinect.JointType.HipLeft, (int)Kinect.JointType.KneeLeft, Kinect.JointType.AnkleLeft, 12));
        newSkeleton.Position[(int)Kinect.JointType.FootLeft] = new Vector3Serializer(createJoint(newSkeleton, (int)Kinect.JointType.HipLeft, (int)Kinect.JointType.KneeLeft, Kinect.JointType.FootLeft, 12));
        //ankle left
        newSkeleton.Position[(int)Kinect.JointType.AnkleLeft] = new Vector3Serializer(createJoint(newSkeleton, (int)Kinect.JointType.KneeLeft, (int)Kinect.JointType.AnkleLeft, Kinect.JointType.AnkleLeft, 13));
        newSkeleton.Position[(int)Kinect.JointType.FootLeft] = new Vector3Serializer(createJoint(newSkeleton, (int)Kinect.JointType.KneeLeft, (int)Kinect.JointType.AnkleLeft, Kinect.JointType.FootLeft, 13));
        //foot left
        newSkeleton.Position[(int)Kinect.JointType.FootLeft] = new Vector3Serializer(createJoint(newSkeleton, (int)Kinect.JointType.AnkleLeft, (int)Kinect.JointType.FootLeft, Kinect.JointType.FootLeft, 14));

        //hip right;
        newSkeleton.Position[(int)Kinect.JointType.HipRight] = new Vector3Serializer(createJoint(newSkeleton, (int)Kinect.JointType.SpineBase, (int)Kinect.JointType.HipRight, Kinect.JointType.HipRight, 15));
        newSkeleton.Position[(int)Kinect.JointType.KneeRight] = new Vector3Serializer(createJoint(newSkeleton, (int)Kinect.JointType.SpineBase, (int)Kinect.JointType.HipRight, Kinect.JointType.KneeRight, 15));
        newSkeleton.Position[(int)Kinect.JointType.AnkleRight] = new Vector3Serializer(createJoint(newSkeleton, (int)Kinect.JointType.SpineBase, (int)Kinect.JointType.HipRight, Kinect.JointType.AnkleRight, 15));
        newSkeleton.Position[(int)Kinect.JointType.FootRight] = new Vector3Serializer(createJoint(newSkeleton, (int)Kinect.JointType.SpineBase, (int)Kinect.JointType.HipRight, Kinect.JointType.FootRight, 15));
        //knee right
        newSkeleton.Position[(int)Kinect.JointType.KneeRight] = new Vector3Serializer(createJoint(newSkeleton, (int)Kinect.JointType.HipRight, (int)Kinect.JointType.KneeRight, Kinect.JointType.KneeRight, 16));
        newSkeleton.Position[(int)Kinect.JointType.AnkleRight] = new Vector3Serializer(createJoint(newSkeleton, (int)Kinect.JointType.HipRight, (int)Kinect.JointType.KneeRight, Kinect.JointType.AnkleRight, 16));
        newSkeleton.Position[(int)Kinect.JointType.FootRight] = new Vector3Serializer(createJoint(newSkeleton, (int)Kinect.JointType.HipRight, (int)Kinect.JointType.KneeRight, Kinect.JointType.FootRight, 16));
        //ankle right
        newSkeleton.Position[(int)Kinect.JointType.AnkleRight] = new Vector3Serializer(createJoint(newSkeleton, (int)Kinect.JointType.KneeRight, (int)Kinect.JointType.AnkleRight, Kinect.JointType.AnkleRight, 17));
        newSkeleton.Position[(int)Kinect.JointType.FootRight] = new Vector3Serializer(createJoint(newSkeleton, (int)Kinect.JointType.KneeRight, (int)Kinect.JointType.AnkleRight, Kinect.JointType.FootRight, 17));
        //foot right
        newSkeleton.Position[(int)Kinect.JointType.FootRight] = new Vector3Serializer(createJoint(newSkeleton, (int)Kinect.JointType.AnkleRight, (int)Kinect.JointType.FootRight, Kinect.JointType.FootRight, 18));

        return newSkeleton;
    }
예제 #9
0
    private double calculateBoneLength(MySkeleton skeleton,
	                                   int jointType1, int jointType2)
    {
        double length = Math.Round(Math.Sqrt(
            (Math.Pow(skeleton.Position[(int)jointType1].x - skeleton.Position[(int)jointType2].x, 2)) +
            (Math.Pow(skeleton.Position[(int)jointType1].y - skeleton.Position[(int)jointType2].y, 2)) +
            (Math.Pow(skeleton.Position[(int)jointType1].z - skeleton.Position[(int)jointType2].z, 2))), 3);
        return length;
    }
예제 #10
0
 public float translateZ(MySkeleton skel, int anchor, int moved, int index)
 {
     double A = calculateBoneLength(skel, anchor, moved);
     double B = referenceBoneLengths[index];
     float Zresized = skel.Position[(int)moved].z;
     float Zanchor = skel.Position[(int)anchor].z;
     float translateZ = Zresized - (((Zresized - Zanchor) / (float)A) * (float)B + Zanchor);
     return translateZ;
 }
예제 #11
0
 public float translateY(MySkeleton skel, int anchor, int moved, int index)
 {
     double A = calculateBoneLength(skel, anchor, moved);
     double B = referenceBoneLengths[index];
     float Yresized = skel.Position[moved].y;
     float Yanchor = skel.Position[anchor].y;
     float translateY = Yresized - (((Yresized - Yanchor) / (float)A) * (float)B + Yanchor);
     return translateY;
 }
예제 #12
0
 public float translateX(MySkeleton skel, int anchor, int moved,int index)
 {
     double A = calculateBoneLength(skel, anchor, moved);
     double B = referenceBoneLengths[index];
     //Debug.Log ("A:" + A + "B:" + B);
     float Xresized = skel.Position[(int)moved].x;
     float Xanchor = skel.Position[(int)anchor].x;
     float translateX = Xresized - (((Xresized - Xanchor) / (float)A) * (float)B + Xanchor);
     return translateX;
 }
예제 #13
0
 private void RefreshBodyObject(MySkeleton skeleton, MySkeleton firstSkeleton)
 {
     //Debug.Log (skeleton.Position [(int)Kinect.JointType.SpineMid].getVector ());
     Hip_Center.localPosition = skeleton.Position[(int)Kinect.JointType.SpineBase].getVector();
     Spine.localPosition = skeleton.Position [(int)Kinect.JointType.SpineMid].getVector();
     Shoulder_Center.localPosition = skeleton.Position[(int)Kinect.JointType.SpineShoulder].getVector();
     Head.localPosition = skeleton.Position[(int)Kinect.JointType.Head].getVector();
     Shoulder_Left.localPosition = skeleton.Position[(int)Kinect.JointType.ShoulderLeft].getVector();
     Elbow_Left.localPosition = skeleton.Position[(int)Kinect.JointType.ElbowLeft].getVector();
     Wrist_Left.localPosition = skeleton.Position[(int)Kinect.JointType.WristLeft].getVector();
     Hand_Left.localPosition = skeleton.Position[(int)Kinect.JointType.HandLeft].getVector();
     Shoulder_Right.localPosition = skeleton.Position[(int)Kinect.JointType.ShoulderRight].getVector();
     Elbow_Right.localPosition = skeleton.Position[(int)Kinect.JointType.ElbowRight].getVector();
     Wrist_Right.localPosition = skeleton.Position[(int)Kinect.JointType.WristRight].getVector();
     Hand_Right.localPosition = skeleton.Position[(int)Kinect.JointType.HandRight].getVector();
     Hip_Left.localPosition = skeleton.Position[(int)Kinect.JointType.HipLeft].getVector();
     Knee_Left.localPosition = skeleton.Position[(int)Kinect.JointType.KneeLeft].getVector();
     Ankle_Left.localPosition = skeleton.Position[(int)Kinect.JointType.AnkleLeft].getVector();
     Foot_Left.localPosition = skeleton.Position[(int)Kinect.JointType.FootLeft].getVector();
     Hip_Right.localPosition = skeleton.Position[(int)Kinect.JointType.HipRight].getVector();
     Knee_Right.localPosition = skeleton.Position[(int)Kinect.JointType.KneeRight].getVector();
     Ankle_Right.localPosition = skeleton.Position[(int)Kinect.JointType.AnkleRight].getVector();
     Foot_Right.localPosition = skeleton.Position[(int)Kinect.JointType.FootRight].getVector();
 }
예제 #14
0
    private double calculateHeight(MySkeleton skeleton,
	                               Kinect.JointType jointType1, Kinect.JointType jointType2)
    {
        double length = Math.Round(Math.Sqrt(
            (Math.Pow(skeleton.Position[(int)jointType1].x - skeleton.Position[(int)jointType2].x, 2)) +
            (Math.Pow(skeleton.Position[(int)jointType1].y - skeleton.Position[(int)jointType2].y, 2)) +
            (Math.Pow(skeleton.Position[(int)jointType1].z - skeleton.Position[(int)jointType2].z, 2))), 3);
        return length;
    }
 private double calculateBoneLength(MySkeleton skeleton,JointType jointType1, JointType jointType2)
 {
     //Debug.Log (jointType1.ToString () + skeleton.Position [(int)jointType1].getVector ().x);
     double length = Math.Round(Math.Sqrt(
         (Math.Pow(skeleton.Position[(int)jointType1].getVector().x - skeleton.Position[(int)jointType2].getVector().x, 2)) +
         (Math.Pow(skeleton.Position[(int)jointType1].getVector().y - skeleton.Position[(int)jointType2].getVector().y, 2)) +
         (Math.Pow(skeleton.Position[(int)jointType1].getVector().z - skeleton.Position[(int)jointType2].getVector().z, 2))), 3);
     return length;
 }