Возможно, вы захотите найти выпуклую оболочку всех точек в вашем многоугольнике.
Один алгоритм для этого - Грэм-Скан со сложностью O (nlgn). Из Кормена:
Let Q be the set of all points in your polygon
Graham-Scan(Q)
1 let p0 be the point in q with the minimum y-coordinate or the leftmost in case of tie
2 let (p1, p2,...,pm) be the remaining points in Q, sorted by polar angle around p0
if more than one point shares the same polar angle, keep the farthest point
3 let S be an empty stack
4 PUSH(p0, S)
5 PUSH(p1, S)
6 PUSH(p2, S)
7 for i = 3 to m
8 while the angle formed by points NEXT_TO_TOP(S), TOP(S), and pi makes a non-left turn
9 POP(S)
10 PUSH(pi, S)
11 return S
S теперь содержит все внешние точки вашего многоугольника. Тебе придется заняться полярной математикой, но это довольно просто. Сортировка по полярному порядку сортирует все точки их котангенса с самой нижней точкой. Я забыл код для проверки правильного поворота, но он есть в Интернете, если вы просто ищете в Graham-Scan. Надеюсь, это поможет!