2013-10-07 122 views
0

我有两个列表:List<Vertex> points,保存顶点(x,y)和列表List<Triangles> triangles,保存三角形的节点(a,b,c)。因此,a,b,c是定义三角形的点的余数。从两个索引列表中选择,创建新对象列表

我现在想轻松地在这些计算。例如。我想获得的所有矢量形状点A到点B每一个三角形:

​​

,但我敢肯定,这可以很优雅地使用LINQ来完成。

喜欢的东西(不使用向量而是一个 “顶点”)

List<Vertex> = (from triangle in triangles select a,b and from point in points select new { pi[b].x-pi[a], pi[b].x-pi[a] }; 

我怎样才能做到这一点?

+0

我假设你想要的三角形是唯一的? –

+0

三角形应该独特...我提前检查(delaunay三角测量)。是像 列表 BC =(从三角三角形选择新的顶点(点[triangle.b] .X - 点[triangle.c] .X,点[triangle.b] .X - 点[triangle.c ] .Y))。ToList() 有效或是否有更好的/快选项? – Shrizzi

回答

0

这似乎做到这一点。这是相当自我描述,并尽可能简单。

var verticesAb = triangles 
    .Select(t => new Vertex(
     points[b].x - points[a].x, 
     points[b].y - points[a].y)); 

,如果你需要一个具体的收集一次可以/应该添加.ToList()ToArray()。 你的评论版本也可以。

+0

完美 - 谢谢。不确定这是否会执行得足够快。 – Shrizzi

+0

@Shrizzi这是一个1:1的转换问题 - 不是'O(N)'没有更快的方法。 – BartoszKP

+0

我的意思是编码。我对linq和c#很陌生,所以我想知道for循环或类似会更好。谢谢! – Shrizzi