Объем произвольного тела
От: TMU_2  
Дата: 18.02.21 11:16
Оценка:
Тело задано набором точек (у каждой по три координаты).
Условно говоря, тысяча точек, образующих этакое облако. Как посчитать объем?
Максимальная точность необязательна, +-10% вполне устроит.

P.S. Точки — не только на поверхности, они более-менее равномерно по всему объему распределены.
Отредактировано 18.02.2021 11:17 TMU_2 . Предыдущая версия .
Re: Объем произвольного тела
От: torvic Голландия  
Дата: 18.02.21 11:21
Оценка: 7 (1) +1
Здравствуйте, TMU_2, Вы писали:

TMU>Тело задано набором точек (у каждой по три координаты).

TMU>Условно говоря, тысяча точек, образующих этакое облако. Как посчитать объем?
TMU>Максимальная точность необязательна, +-10% вполне устроит.

можно методом Монте-Карло, тогда задача сведётся к определению положения точки относительно тела: внутри/снаружи
Re: Convex hull
От: Qbit86 Кипр
Дата: 18.02.21 16:05
Оценка: 22 (3)
Здравствуйте, TMU_2, Вы писали:

TMU>Тело задано набором точек (у каждой по три координаты).

TMU>Как посчитать объем?
TMU>P.S. Точки — не только на поверхности, они более-менее равномерно по всему объему распределены.

Вероятно, сначала нужно найти выпуклую оболочку.
Потом можно из какой-нибудь точки внутри выпуклого многогранника построить пирамидки к каждой грани и просуммировать их объёмы.
Глаза у меня добрые, но рубашка — смирительная!
Re: Объем произвольного тела
От: kov_serg Россия  
Дата: 18.02.21 16:47
Оценка:
Здравствуйте, TMU_2, Вы писали:

TMU>Тело задано набором точек (у каждой по три координаты).

TMU>Условно говоря, тысяча точек, образующих этакое облако. Как посчитать объем?
TMU>Максимальная точность необязательна, +-10% вполне устроит.
TMU>P.S. Точки — не только на поверхности, они более-менее равномерно по всему объему распределены.
Если более-мене равномерны по объёму. То методом монте-карло ограничиваем объём прапараллелепипедом или сферой. Генерим произвольные точки
если они ближе порога к любой точке облаке считаем попали если дальше мимо. Отношение попаданий к общему количеству на объём ограничивающей фигуры получим результат.

Вариант 2 надо построить поверхность и потом используя теорему Остраградского-Гауса свести объём к суммированию по поверхности. Но поверхности бывают очень замысловатые
например кружка из под кофе. И обычной выпуклой оболочкой не обойтись.

Вариант 3 выбираешь произвольную ось вдоль облака точек и нарезаешь слоями. в каждом слое вычисляешь площадь попавших точек в это срез, умножаешь на высоту и складываешь.
В результате будет объём. Варьируя оси и способы вычисления площади на срезах можно получить разные оценки и прикинуть ошибку.
Для вычисления площади среза тоже можно выполнять разными методами. Например размыть точки и по порогу построить границу. Или просто нарезать сеткой n*m и смотреть попали нет.

ps: как бы все эти методы имеют сходимость хуже sqrt(n) где n-кол-во точек и кучу подгоночных параметров. Так что точек должно быть много.
Re[2]: Convex hull
От: TMU_2  
Дата: 20.02.21 12:51
Оценка: +1
TMU>>Тело задано набором точек (у каждой по три координаты).
TMU>>Как посчитать объем?
TMU>>P.S. Точки — не только на поверхности, они более-менее равномерно по всему объему распределены.
Q>Вероятно, сначала нужно найти выпуклую оболочку.
Q>Потом можно из какой-нибудь точки внутри выпуклого многогранника построить пирамидки к каждой грани и просуммировать их объёмы.



Спасибо за слова Convex hull ))
Если кому нужно, это реализовано в scipy.spatial, ConvexHull
Моя задача решается трем строчками на питоне.
Re[3]: Convex hull
От: Mr.Delphist  
Дата: 16.03.21 11:01
Оценка:
Здравствуйте, TMU_2, Вы писали:

TMU>Спасибо за слова Convex hull ))

TMU>Если кому нужно, это реализовано в scipy.spatial, ConvexHull
TMU>Моя задача решается трем строчками на питоне.

Решал такую задачу в универе, в варианте 2D. На ассемблере. Было больно
FPU тогда не было, всё целочисленным счётом. Вышло тыщи 3 строк, но сдал успешно.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.