Шнурки Гаусса
В заголовке приведено обиходное название формулы Гаусса для вычисления площади простого многоугольника.
Далее показана реализация этого несложного алгоритма на консольном C++, код проверен в Studio 2015 для координат вершин многоугольника, изображённого в "Вики".
Координаты последней точки в многоугольнике pointSet
должны совпадать с координатами первой, сама функция shoelace
для простоты замыкания многоугольника не делает.
#include <cstdlib> #include <cstdio> #include <cmath> struct point { double x, y; }; double shoelace (int numPoints, point *pointSet) { double leftSum = 0., rightSum = 0.; for (int i = 0; i<numPoints-1; i++) { leftSum += pointSet[i].x*pointSet[i+1].y; rightSum += pointSet[i+1].x*pointSet[i].y; } return 0.5*fabs(leftSum - rightSum); } int main () { const int numPoints = 6; point pointSet[numPoints] = { {3,4}, {5,11}, {12,8}, {9,5}, {5,6}, {3,4} }; printf("The polygon area = %lf", shoelace(numPoints,&pointSet[0])); getchar(); return 0; }
05.02.2018, 13:54 [2189 просмотров]