Advertisement
Guest User

Untitled

a guest
Dec 1st, 2015
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.91 KB | None | 0 0
  1. public static TripletMatrix CreateCotanLaplacian(TriangleMesh mesh, double lambda = 1.0, double eye = 0.0, bool normalized = false)
  2. {
  3. var n = mesh.Vertices.Count;
  4. int nz = mesh.Vertices.Aggregate(0, (c, x) => c += x.VertexCount());
  5. var L = new TripletMatrix(n, n, nz + n);
  6.  
  7. /// TODO_A2 Task 3:
  8. /// 3. Implement cotangents Laplacian matrix (medium)
  9. double sumF = 0;
  10.  
  11. for (int i = 0; i < n; i++)
  12. {
  13. foreach(var f in mesh.Vertices.ElementAt(i).Faces)
  14. {
  15. foreach(var he in f.Halfedges)
  16. {
  17. if(he.FromVertex == mesh.Vertices.ElementAt(i))
  18. {
  19. sumF += he.Traits.VoronoiRegionArea;
  20. }
  21. }
  22.  
  23. }
  24. var Half = mesh.Vertices.ElementAt(i).Halfedges;
  25. for (int j = 0; j < n; j++)
  26. {
  27. if (i == j)
  28. {
  29. L[i, i] = sumF;
  30. }
  31. else if (mesh.Vertices.ElementAt(i).Vertices.Contains(mesh.Vertices.ElementAt(j)))
  32. {
  33. double sumhef = 0;
  34. foreach(var edge in mesh.Vertices.ElementAt(i).Edges)
  35. {
  36. if(edge.Vertex0 == mesh.Vertices.ElementAt(i) && edge.Vertex1 == mesh.Vertices.ElementAt(j) || edge.Vertex0 == mesh.Vertices.ElementAt(j) && edge.Vertex1 == mesh.Vertices.ElementAt(i))
  37. {
  38. var hef1 = edge.Face0.Halfedges;
  39. var hef2 = edge.Face1.Halfedges;
  40. foreach(var hef in hef1)
  41. {
  42. if(hef.FromVertex == mesh.Vertices.ElementAt(i))
  43. {
  44. sumhef += hef.Traits.VoronoiRegionArea;
  45. }
  46. }
  47. foreach (var hef in hef2)
  48. {
  49. if (hef.FromVertex == mesh.Vertices.ElementAt(i))
  50. {
  51. sumhef += hef.Traits.VoronoiRegionArea;
  52. }
  53. }
  54. }
  55. }
  56. if (normalized)
  57. L[i, j] = sumhef / 2 / sumF;
  58. else
  59. L[i, j] = sumhef / 2;
  60. }
  61. else
  62. L[i, j] = 0.0;
  63. }
  64. }
  65.  
  66.  
  67. return L;
  68. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement