Kinect工具箱c#语法

本文关键字:语法 工具箱 Kinect | 更新日期: 2023-09-27 18:10:12

我一直在研究kinect工具箱中用于比较矢量序列的算法,但我很难理解这段代码:

 public static float DistanceTo(this List<Vector2> path1, List<Vector2> path2)
    {
        return path1.Select((t, i) => (t - path2[i]).Length).Average();
    }

据我所知,这需要两个2d向量序列,并通过欧几里得距离计算它们之间的距离,也就是说,它计算向量之间的差的长度,但是我从来没有见过括号内的语法,特别是=>。

Kinect工具箱c#语法

您可以简单地展开这个select语句。

path1.Select((t, i) => (t - path2[i]).Length)遍历path1,对于其中的每个元素,它选择Vector2元素及其在path1列表中的索引。

从这个中间结果中,它将在同一索引(t - path2[i])上计算两个相应向量的差值,其中-是向量减法的参数重载。根据这个差值,它将计算出vector length,它基本上只是对其元素的平方(?)求和。

Average()最终只是取所有给定向量差的平均值。

这段c#代码在语义上是相同的:

float sum = 0.0f;
for(int i = 0; i < path1.Count; i++)
{
   sum += (path1[i] - path[2]).Length;
}
return sum / (float)path1.Count;

或者作为LINQ zip表达式更好:

path1.Zip(path2, (left, right) => (left-right).Length).Average();