Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- private List<Vertex> MakeConvexHull()
- {
- int n = Vertices.Count, k = 0;
- List<Vertex> Hull = new List<Vertex>(new Vertex[2 * n]);
- Vertices.Sort((a, b) => a.X == b.X ? a.Y.CompareTo(b.Y) : a.X.CompareTo(b.X));
- // Нижняя оболочка:
- for (int i = 0; i < n; Hull[k++] = Vertices[i++])
- for (; k >= 2 && Cross(Hull[k - 2], Hull[k - 1], Vertices[i]) <= 0; k--) ;
- // Верхняя оболочка:
- for (int i = n - 2, t = k + 1; i >= 0; Hull[k++] = Vertices[i--])
- for (; k >= t && Cross(Hull[k - 2], Hull[k - 1], Vertices[i]) <= 0; k--) ;
- return Hull.Take(k - 1).ToList();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement