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