Вычисление площади сложной фигуры.
От: Bitman72  
Дата: 17.04.23 20:59
Оценка:
Добрый вечер всем.

Проблема такова: есть территория, ограниченная GPS координатами. Нужно вычислить площадь участков.
Основная масса фигур — почти прямоугольники, но встречаются очень замысловатые формы. Вот с ними — проблема.
Геодезическая точность при вычислении не нужна. Можно считать на сфере. Наверное, можно даже и на плоской проекции.

Из того, что уже пробовал: прямоугольник, в который вписана фигура. Разбиение на квадраты. Работает, но долго. В принципе, Монте-Карло работает так же и не значительно быстрее.

Есть что-то иное?
Re: Вычисление площади сложной фигуры.
От: T4r4sB Россия  
Дата: 17.04.23 21:05
Оценка:
Здравствуйте, Bitman72, Вы писали:

B>Добрый вечер всем.


B>Проблема такова: есть территория, ограниченная GPS координатами. Нужно вычислить площадь участков.


Как участок задаётся? Множеством углов? Или множеством точек?
Нет такой подлости и мерзости, на которую бы не пошёл gcc ради бессмысленных 5% скорости в никому не нужном синтетическом тесте
Re: Вычисление площади сложной фигуры.
От: apachik  
Дата: 17.04.23 21:42
Оценка:
Здравствуйте, Bitman72, Вы писали:

B>Добрый вечер всем.


B>Проблема такова: есть территория, ограниченная GPS координатами. Нужно вычислить площадь участков.

B>Основная масса фигур — почти прямоугольники, но встречаются очень замысловатые формы. Вот с ними — проблема.
B>Геодезическая точность при вычислении не нужна. Можно считать на сфере. Наверное, можно даже и на плоской проекции.

B>Из того, что уже пробовал: прямоугольник, в который вписана фигура. Разбиение на квадраты. Работает, но долго. В принципе, Монте-Карло работает так же и не значительно быстрее.


B>Есть что-то иное?


есть очень простой способ вычисления площади многоугольника (не важно какой формы, но без самопересечений), заданного координатами своих верших:
http://algolist.ru/maths/geom/polygon/area.php
считают суммы площадей трапеций под всеми отрезками. т.е. что-то типа разницы двух интегралов под верхним контуром и под нижним. Но магия в том, что даже не нужно задумываться где там крайние точки "разворота". Просто считай подряд и будет профит
Re[2]: Вычисление площади сложной фигуры.
От: T4r4sB Россия  
Дата: 17.04.23 21:45
Оценка:
Здравствуйте, apachik, Вы писали:

A>считают суммы площадей трапеций под всеми отрезками.


Слишком сложно, гораздо проще
sum(i=2..n) square_of_triangle(a[i],a[i-1],a[0]);
Нет такой подлости и мерзости, на которую бы не пошёл gcc ради бессмысленных 5% скорости в никому не нужном синтетическом тесте
Re[3]: Вычисление площади сложной фигуры.
От: apachik  
Дата: 17.04.23 21:51
Оценка:
Здравствуйте, T4r4sB, Вы писали:

TB>Здравствуйте, apachik, Вы писали:


A>>считают суммы площадей трапеций под всеми отрезками.


TB>Слишком сложно, гораздо проще

TB>
TB>sum(i=2..n) square_of_triangle(a[i],a[i-1],a[0]);
TB>


это будет работать только для выпуклых многоугольников.
представьте, что у вас, например, звезда, или просто "буква Г"

Ну и на всякий случай еще отмечу, что площадь треугольника не нужно считать по формуле Герона
Отредактировано 17.04.2023 21:51 apachik . Предыдущая версия .
Re[4]: Вычисление площади сложной фигуры.
От: T4r4sB Россия  
Дата: 17.04.23 21:55
Оценка:
Здравствуйте, apachik, Вы писали:

A>это будет работать только для выпуклых многоугольников.

A>представьте, что у вас, например, звезда, или просто "буква Г"

Ну площадь-то ориентированную надо брать, и всё сойдётся.

A>Ну и на всякий случай еще отмечу, что площадь треугольника не нужно считать по формуле Герона


Само собой, надо брать косое произведение векторов пополам.
Нет такой подлости и мерзости, на которую бы не пошёл gcc ради бессмысленных 5% скорости в никому не нужном синтетическом тесте
Re[5]: Вычисление площади сложной фигуры.
От: apachik  
Дата: 17.04.23 21:57
Оценка:
Здравствуйте, T4r4sB, Вы писали:

TB>Здравствуйте, apachik, Вы писали:


A>>это будет работать только для выпуклых многоугольников.

A>>представьте, что у вас, например, звезда, или просто "буква Г"

TB>Ну площадь-то ориентированную надо брать, и всё сойдётся.


A>>Ну и на всякий случай еще отмечу, что площадь треугольника не нужно считать по формуле Герона


TB>Само собой, надо брать косое произведение векторов пополам.


вот теперь соглашусь
Re[2]: Вычисление площади сложной фигуры.
От: Bitman72  
Дата: 18.04.23 09:00
Оценка:
Здравствуйте, T4r4sB, Вы писали:

TB>Как участок задаётся? Множеством углов? Или множеством точек?

Множеством координат. Т.е. точек.

В общем множестве простых регионов встречаются невероятно сложные. И улиткообразные и какие угодно.
Re[3]: Вычисление площади сложной фигуры.
От: Vzhyk2  
Дата: 19.04.23 07:18
Оценка:
B>Множеством координат. Т.е. точек.
Т.е. в современной терминологии "облаком точек". Самое простое построить convex hull (по-русски, если память не изменяет, выпуклый многоугольник) по облаку и уже посчитать простой формулой площадь фигуры.
Второй путь построить сетку и посчитать площадь квадратиков занятых точками (сложность с подбором шага сетки).
Третий сложнее, по облаку оценить реальную границу объекта (тут методов море и разной сложности и нейронки, в том числе, используются) и использовать любой из двух методов выше.
Re[4]: Вычисление площади сложной фигуры.
От: Vzhyk2  
Дата: 19.04.23 07:37
Оценка:
B>>Множеством координат. Т.е. точек.
V>Т.е. в современной терминологии "облаком точек".
Ну и поскольку я сегодня добрый, то в либе CGAL многое для тебя давно сделано.
Re[5]: Вычисление площади сложной фигуры.
От: Pauel Беларусь http://blogs.rsdn.org/ikemefula
Дата: 19.04.23 09:26
Оценка:
Здравствуйте, T4r4sB, Вы писали:

A>>Ну и на всякий случай еще отмечу, что площадь треугольника не нужно считать по формуле Герона


TB>Само собой, надо брать косое произведение векторов пополам.


А что такое косое произведение векторов пополам? Скалярное что ли? А если вектора перпендикулярны?
Re[6]: Вычисление площади сложной фигуры.
От: Vzhyk2  
Дата: 19.04.23 09:30
Оценка:
P>А что такое косое произведение векторов пополам? Скалярное что ли? А если вектора перпендикулярны?
https://www.google.com/search?client=firefox-b-lm&q=%D0%BA%D0%BE%D1%81%D0%BE%D0%B5+%D0%BF%D1%80%D0%BE%D0%B8%D0%B7%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5+%D0%B2%D0%B5%D0%BA%D1%82%D0%BE%D1%80%D0%BE%D0%B2
https://grafika.me/node/1042

З.Ы. До какой же степени деградировал кывт.
Re[7]: Вычисление площади сложной фигуры.
От: Pauel Беларусь http://blogs.rsdn.org/ikemefula
Дата: 19.04.23 10:17
Оценка: -1 :))
Здравствуйте, Vzhyk2, Вы писали:

P>>А что такое косое произведение векторов пополам? Скалярное что ли? А если вектора перпендикулярны?

V>https://www.google.com/search?client=firefox-b-lm&q=%D0%BA%D0%BE%D1%81%D0%BE%D0%B5+%D0%BF%D1%80%D0%BE%D0%B8%D0%B7%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5+%D0%B2%D0%B5%D0%BA%D1%82%D0%BE%D1%80%D0%BE%D0%B2
V>https://grafika.me/node/1042

V>З.Ы. До какой же степени деградировал кывт.


Похоже, один ты не деградировал. Наверное, уже некуда?
Re[8]: Вычисление площади сложной фигуры.
От: Vzhyk2  
Дата: 19.04.23 10:27
Оценка:
P>Похоже, один ты не деградировал.
Похоже на то.
Re[6]: Вычисление площади сложной фигуры.
От: T4r4sB Россия  
Дата: 19.04.23 10:36
Оценка: +1 -1
Здравствуйте, Pauel, Вы писали:

P>А что такое косое произведение векторов пополам? Скалярное что ли? А если вектора перпендикулярны?


Зачем ты задаешь тупые вопросы которые гуглятся на раз?
Нет такой подлости и мерзости, на которую бы не пошёл gcc ради бессмысленных 5% скорости в никому не нужном синтетическом тесте
Re[4]: Вычисление площади сложной фигуры.
От: Pauel Беларусь http://blogs.rsdn.org/ikemefula
Дата: 19.04.23 15:28
Оценка:
Здравствуйте, apachik, Вы писали:

A>Ну и на всякий случай еще отмечу, что площадь треугольника не нужно считать по формуле Герона


А можно спросить почему? Никак не могу понять
.
Re[5]: Вычисление площади сложной фигуры.
От: T4r4sB Россия  
Дата: 19.04.23 16:48
Оценка: +1
Здравствуйте, Pauel, Вы писали:

P>А можно спросить почему? Никак не могу понять


Потому что для неё надо знать длины сторон (каждая — это квадратный корень) и ещё в конце взять корень. И ещё она не ориентированная. Косое произведение — это два числовых произведения и одно вычитание.
Нет такой подлости и мерзости, на которую бы не пошёл gcc ради бессмысленных 5% скорости в никому не нужном синтетическом тесте
Re: Вычисление площади сложной фигуры.
От: Teolog  
Дата: 19.04.23 20:04
Оценка:
Перевести всю пачку в декартовы координаты относительно середины, либо одной из точек если середину лень искать
Разбить многоугольник га треугольники триангуляцией делоне
Посчитать сумму площадей треугольников по вершинам
Re: Вычисление площади сложной фигуры.
От: о_О
Дата: 19.04.23 21:25
Оценка:
Здравствуйте, Bitman72, Вы писали:

А есть инструмент для подсчета? Чтобы векторный ыормат скормить, а он подсчитал?
Re[2]: Вычисление площади сложной фигуры.
От: Vzhyk2  
Дата: 20.04.23 08:21
Оценка:
T>Перевести всю пачку в декартовы координаты относительно середины, либо одной из точек если середину лень искать
T>Разбить многоугольник га треугольники триангуляцией делоне
T>Посчитать сумму площадей треугольников по вершинам
Только не забывать, что получишь тот самый convex hull.
Но да, иногда такой путь быстрее, иногда быстрее построить convex hull и его площадь посчитать.
Кстати подходит любая триангуляция (покрытие треугольниками без пересечений), не обязательно делоне.

Ну и ТС может взять за основу какой алгоритм построения convex и переработать его так, чтобы строить unconvex. И если в интернете посмотрит, то таких алгоритмов там много есть.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.