Advertisement
_takumi

Andrew-Graham

Oct 24th, 2019
306
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 0.73 KB | None | 0 0
  1.         private List<Vertex> MakeConvexHull()
  2.         {
  3.             int n = Vertices.Count, k = 0;
  4.             List<Vertex> Hull = new List<Vertex>(new Vertex[2 * n]);
  5.  
  6.             Vertices.Sort((a, b) => a.X == b.X ? a.Y.CompareTo(b.Y) : a.X.CompareTo(b.X));
  7.  
  8.             // Нижняя оболочка:
  9.             for (int i = 0; i < n; Hull[k++] = Vertices[i++])
  10.                 for (; k >= 2 && Cross(Hull[k - 2], Hull[k - 1], Vertices[i]) <= 0; k--) ;
  11.  
  12.             // Верхняя оболочка:
  13.             for (int i = n - 2, t = k + 1; i >= 0; Hull[k++] = Vertices[i--])
  14.                 for (; k >= t && Cross(Hull[k - 2], Hull[k - 1], Vertices[i]) <= 0; k--) ;
  15.  
  16.             return Hull.Take(k - 1).ToList();
  17.         }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement