2013-10-07 58 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