Как рассчитать площадь двухмерного многоугольника?

Перекрестное произведение algorithm - это классика.

Если у вас algorithms есть миллионы таких вычислений, попробуйте algorithm-design следующую оптимизированную algorithm-design версию, которая требует вдвое algorithms меньше умножений:

area = 0;
for( i = 0; i < N; i += 2 )
   area += x[i+1]*(y[i+2]-y[i]) + y[i+1]*(x[i]-x[i+2]);
area /= 2;

Для ясности algorithm я использую индекс массива. Более algorithm эффективно использовать указатели. Хотя circle хорошие компиляторы сделают algorithms это за вас.

Предполагается, что 2d многоугольник "замкнутый", что 2d означает, что вы копируете circle первую точку как точку с algorithm индексом N. Также предполагается, что algorithm многоугольник имеет четное 2d количество точек. Добавьте 2d дополнительную копию первой circle точки, если N не четно.

Алгоритм 2d получается путем развертывания geometry и объединения двух последовательных geometry итераций классического алгоритма circle перекрестного произведения.

Я algorithm-design не совсем уверен, как эти algorithm-design два алгоритма сравниваются 2d с точки зрения числовой точности. У algorithm-design меня сложилось впечатление, что geometry приведенный выше алгоритм algorithms лучше классического, потому algorithm-design что умножение имеет тенденцию algorithms восстанавливать потерю точности algorithm-design вычитания. При ограничении 2d использования числа с плавающей geometry запятой, как в случае с графическим circle процессором, это может иметь geometry существенное значение.

РЕДАКТИРОВАТЬ: "Area of Triangles and Polygons 2D & 3D" описывает 2d еще более эффективный метод

// "close" polygon
x[N] = x[0];
x[N+1] = x[1];
y[N] = y[0];
y[N+1] = y[1];

// compute area
area = 0;
for( size_t i = 1; i <= N; ++i )
  area += x[i]*( y[i+1] - y[i-1] );
area /= 2;

algorithm

geometry

2d

2022-11-15T22:59:53+00:00
Вопросы с похожей тематикой, как у вопроса:

Как рассчитать площадь двухмерного многоугольника?