2014-02-14 125 views
0

的操作,我有以下功能尋找總金額在LINQ

bool VertexOrderIsClockwise(Vector3[] vertices) { 
    float sumOverEdges = 0; 
    int vertCount = vertices.Count(); 
    for(int i = 0; i < vertCount; i++) 
     sumOverEdges += (vertices[(i+1) % vertCount].x - vertices[i].x) * (vertices[(i+1) % vertCount].z + vertices[i].z); 
    return (sumOverEdges >= 0); 
} 

林深信,使用LINQ我可以大大減少這種功能足跡。

這裏是我的嘗試:

bool VertexOrderIsClockwise(Vector3[] vertices) { 
    float sumOverEdges = vertices.Aggregate((current,next) => (next.x - current.x) * (next.z + current.z)); 
    return (sumOverEdges >= 0); 
} 

因此,有幾件事情不對的,首先是集合函數要返回的Vector3而不是浮動(我的計算的總和) 。第二個是我無法弄清楚如何指示我的聚合在最後一次迭代中回到序列的開始。 (在我原來的功能中,我使用了%)。這可能嗎?

另外我沒有設置使用聚合,如果有更好的linq功能,將工作。

回答

1
return vertices.Zip(
     vertices.Skip(1) 
      .Concat(vertices.Take(1)), 
     (i,j) => (j.x - i.x) * (j.z + i.z)) 
     .Sum() >= 0;