Вам не нужно находить выпуклый корпус. Просто используйте формулу площади из набора точек, упорядоченных против часовой стрелки:
http://en.wikipedia.org/wiki/Polygon#Area_and_centroid
float totalArea = 0.0;
for(i=0; i<N; i++) {
float parallelogramArea = (point[i].x*point[i+1].y - point[i+1].x*point[i].y)
float triangleArea = parallelogramArea / 2.0;
totalArea += triangleArea;
}
// or divide by 2 out here for efficiency
Формула площади получается из взятия каждого ребра AB и вычисления (подписанной) области между ребром и началом координат (треугольник ABO) путем взятия перекрестного произведения (которое дает вам площадь параллелограмма) и разрезания его в половина (коэффициент 1/2). При наложении вокруг многоугольника эти положительные и отрицательные треугольники будут перекрываться, и область между началом координат и многоугольником будет удалена и будет суммироваться до 0, при этом остается только область внутри. Вот почему формула называется формулой геодезиста, поскольку «геодезист» находится в начале координат; если идти против часовой стрелки, положительная область добавляется при движении влево -> вправо, а отрицательная область добавляется при движении вправо -> влево с точки зрения начала координат.
Математическая формула приведена ниже, но не обеспечивает интуицию за ней (как указано выше):
редактировать (после изменения вопроса)
Нет абсолютно никакого способа "получить их заказ" без дополнительных предположений, например, «многоугольник выпуклый».
Если многоугольник вогнутый, он становится практически невозможным в общем случае без большого количества дополнительных предположений (доказательство: рассмотрим точку, которая лежит внутри выпуклой оболочки, но чьи соседи нет; существует много возможных допустимых многоугольников) вы можете построить, используя эту точку, ее соседей и их соседей).
Если многоугольник выпуклый, все, что вам нужно сделать, это отсортировать по углу от некоторой произвольной точки внутри многоугольника (например, центроид трех произвольных точек).