C# Kinect应用程序的源代码反向工程

C# Kinect应用程序的源代码反向工程,c#,wpf,kinect,kinect-sdk,C#,Wpf,Kinect,Kinect Sdk,我正在开发Kinect摄像头的开源应用程序, 我在阅读资料时遇到了一个问题 顺便说一句,项目的想法是用手控制PowerPoint,您可以找到源代码 作者使用以下代码: Skeleton closestSkeleton = skeletons.Where(s => s.TrackingState == SkeletonTrackingState.Tracked) .OrderBy(s => s.Position.Z * Math.Abs(s.Position.X)) .

我正在开发Kinect摄像头的开源应用程序, 我在阅读资料时遇到了一个问题

顺便说一句,项目的想法是用手控制PowerPoint,您可以找到源代码

作者使用以下代码:

Skeleton closestSkeleton = skeletons.Where(s => s.TrackingState == SkeletonTrackingState.Tracked)
    .OrderBy(s => s.Position.Z * Math.Abs(s.Position.X))
    .FirstOrDefault();
有谁能帮我弄清楚什么是
s=>s.Position.Z*Math.Abs(s.Position.X)


意思是说,我知道这是一个lambda表达式,所以我只需要找出原因?

这是一个距离度量,用于确定离Kinect传感器最近的骨架

在骨架空间中,Z是与Kinect传感器的距离(请参见)

如果你认为房间被分成左半部分和右半部分,通过Kinect传感器的一条线。。。。那么X是某物离那条线的距离。向左或向右走多远

这也是为什么使用X的绝对值——代码显示骨架离假设的分界线有多远

因此,该代码查看物体离传感器的距离(Z),然后将其乘以距离左侧或右侧(X)的距离。这是一种有点原始的距离测定方法。(人们本应使用毕达哥拉斯定理,但这可能被认为太慢了?)


代码采用
FirstOrDefault
骨架,其中这些骨架按此距离度量排序。

s=>s.Position.Z*Math.Abs(s.Position.X)
位于OrderBy语句中,用作对所有检测到的实体进行排序的数量。它是根据径向距离对骨架进行加权排序,而不仅仅是正交Z分离


考虑位于同一z坐标的两个对象,以及位于原点的摄影机。最近的一个是水平(x)距离较小的一个。

它根据与传感器的距离对骨骼(已识别的身体)进行排序;它是通过z值(可能是距离传感器的距离-深度)乘以距离传感器视野中心的偏移距离(x)来计算的。Abs()函数将始终返回正数,因此假定该值一侧为正数,另一侧为负数。它使用的是三维笛卡尔坐标系。它只是想知道骨架离kinect有多远