решение, не зависящее от языка:
ДАНО: многоугольник ВСЕГДА может быть составлен из n-2 треугольников, которые не перекрываются (n = количество точек ИЛИ сторон). 1 треугольник = 3-сторонний многоугольник = 1 треугольник; 1 квадрат = 4 односторонних многоугольника = 2 треугольника; и т.д. до тошноты QED
следовательно, многоугольник может быть уменьшен путем «отрезания» треугольников, и общая площадь будет суммой площадей этих треугольников. Попробуйте это с листом бумаги и ножницами, лучше всего, если вы сможете визуализировать процесс, прежде чем следовать.
если вы возьмете любые 3 последовательные точки на пути полигонов и создадите треугольник с этими точками, у вас будет один и только один из трех возможных сценариев:
- Полученный треугольник полностью находится внутри исходного многоугольника
- Полученный треугольник находится полностью вне исходного многоугольника
- Полученный треугольник частично содержится в исходном многоугольнике
нас интересуют только случаи, попадающие в первый вариант (полностью содержится).
каждый раз, когда мы находим один из них, мы отсекаем его, вычисляем его площадь (здесь легко объяснить, формулу не будем объяснять) и создаем новый многоугольник с одной стороной меньше (эквивалентно многоугольнику с отрезанным треугольником). пока у нас не останется только один треугольник.
как реализовать это программно:
создать массив (последовательных) точек, которые представляют путь ВО ВРЕМЕНИ многоугольника. начать с точки 0. запустить массив, образуя треугольники (по одному за раз) из точек x, x + 1 и x + 2. преобразовать каждый треугольник из фигуры в область и пересечь его с областью, созданной из многоугольника. Если результирующее пересечение идентично исходному треугольнику, то указанный треугольник полностью содержится в многоугольнике и может быть отрезан. удалите x + 1 из массива и начните снова с x = 0. в противном случае (если треугольник находится за пределами [частично или полностью] многоугольника), перейдите к следующей точке x + 1 в массиве.
Кроме того, если вы хотите интегрироваться с картографированием и начинаете с гео-точек, вы должны сначала конвертировать из гео-точек в точки экрана. это требует принятия решения о моделировании и формуле для формы земли (хотя мы склонны думать о земле как о сфере, на самом деле это неправильный яйцевид (яйцевидная форма) с вмятинами). Есть много моделей, для получения дополнительной информации вики. Важным вопросом является то, будете ли вы считать область плоскостью или изогнутой. в общем, «маленькие» области, где точки находятся на расстоянии до нескольких километров друг от друга, не будут вызывать значительных ошибок, если рассматривать их как плоские, а не выпуклые.