我正在开发一个kinect手势应用程序。所以我从互联网上获得了一个代码来处理手势。
handupgesture()
{
bool up = false;
float refDistance = 0.2F;
SkeletonPoint refPos = localSkeletonHistory[0].Joints[JointType.ShoulderCenter].Position;
SkeletonPoint startPos = localSkeletonHistory[0].Joints[JointType.HandRight].Position;
for (int i = 20; i < localSkeletonHistory.Count; i++)
{
if (!(Math.Abs(localSkeletonHistory[i].Joints[JointType.ShoulderCenter].Position.Y - refPos.Y) < 0.05F &&
Math.Abs(localSkeletonHistory[i].Joints[JointType.HandRight].Position.X - startPos.X) < 0.05F &&
Math.Abs(localSkeletonHistory[i].Joints[JointType.HandRight].Position.Z - startPos.Z) < 0.05F ))
{
break;
}
if (localSkeletonHistory[i].Joints[JointType.HandRight].Position.Y >= (startPos.Y + refDistance))
{
up = true;
SkeletonHistory.Clear();
break;
}
}
return up;
}
我的怀疑是:
此代码未检测到手动。有什么错误或建议吗?
答案 0 :(得分:1)
0.05F
中的 C#
表示浮点数。
float关键字表示存储32位的简单类型 浮点值。下表显示了精度和 浮动类型的近似范围。
默认情况下,分配右侧的实际数字文字 运算符被视为double。因此,要初始化一个浮点数 变量,使用后缀f或F,如下例所示:
float x = 3.5F; or in your case 0.05F
来源:https://msdn.microsoft.com/en-us/library/b1e65aza.aspx
至于你的第二个问题,z轴代表深度。 每帧,捕获的深度图像由Kinect运行时处理为骨架数据。骨架数据包含最多两个在深度传感器中可见的人的骨骼的3D位置数据。骨架和每个骨架关节的位置(如果启用了主动跟踪)存储为(x,y,z)坐标。与深度空间不同,骨架空间坐标以米为单位表示。
x,y和z轴是深度传感器的主体轴,如下所示:
这是一个右手坐标系,它将Kinect置于原点,正z轴在Kinect指向的方向上延伸。正y轴向上延伸,正x轴向左延伸。
来源:https://msdn.microsoft.com/en-us/library/hh973078.aspx
至于你的上一个问题 - 尽量减少0.5F容差。
此外,我想指出Windows Kinect网站中的一些示例: https://kinectforwindows.codeplex.com/