Kinect Earth Move


Today's project was first seen on during the Kinect for Windows SDK launch on June 17, 2011. It's a simple demo, but that's the thing. It shows how much you can do quickly, with just a little code.

Kinect Earth Move

KinectEarthMove, which use color image and skeleton from Kinect, needs Kinect for Windows SDK beta and was demonstrated on Kinect for Windows SDK beta launch at Channel 9 on June 17 2011.

User in front of Kinect can rotate, translate and scale the earth between his hands.

KinectEarthMove is sample project for Kinect for Windows SDK beta.

Project Information URL:

Project Download URL:

Project Source URL:




private void nui_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
    SkeletonFrame skeletonFrame = e.SkeletonFrame;
    Vector shoulderC = new Vector();
    Vector handR = new Vector();
    Vector handL = new Vector();
    Vector shoulderR = new Vector();
    Vector shoulderL = new Vector();
    // find positions of shoulders and hands
    foreach (SkeletonData data in skeletonFrame.Skeletons)
        if (SkeletonTrackingState.Tracked == data.TrackingState)
            JointsCollection j = data.Joints;
            shoulderC = j[JointID.ShoulderCenter].Position;
            handL = j[JointID.HandLeft].Position;
            handR = j[JointID.HandRight].Position;
            shoulderL = j[JointID.ShoulderLeft].Position;
            shoulderR = j[JointID.ShoulderRight].Position;
    // translate
    // Find the center of both hands
    Vector3D pos = new Vector3D((handR.X + handL.X) / 2.0, (handR.Y + handL.Y) / 2.0, (handR.Z + handL.Z) / 2.0);
    // move to the center of both hand
    earthTransform.Translate = new Vector3D(pos.X*tfactor, pos.Y*tfactor, pos.Z);
    // scale
    // find the vector from left hand to right hand
    Vector3D hand = new Vector3D(handR.X - handL.X, handR.Y - handL.Y, handR.Z - handL.Z);
    // find the vector from left shoulder to right shoulder
    Vector3D shoulder = new Vector3D(shoulderR.X - shoulderL.X, shoulderR.Y - shoulderL.Y, shoulderR.Z - shoulderL.Z);
    // scale the earth from the difference of lengths(squared) of inter-shoulders and inter-hands
    // if same length scale to 0.8. longer inter-hand , bigger scale
    earthTransform.Scale= hand.LengthSquared - shoulder.LengthSquared + 0.8;
    // rotataion
    // get the angle and axis of inter-hands vector to rotate the earth
    earthTransform.Angle = Vector3D.AngleBetween(new Vector3D(1, 0, 0), hand);
    earthTransform.Axis = Vector3D.CrossProduct(new Vector3D(1, 0, 0), hand);