Тело задано набором точек (у каждой по три координаты).
Условно говоря, тысяча точек, образующих этакое облако. Как посчитать объем?
Максимальная точность необязательна, +-10% вполне устроит.
P.S. Точки — не только на поверхности, они более-менее равномерно по всему объему распределены.
Здравствуйте, TMU_2, Вы писали:
TMU>Тело задано набором точек (у каждой по три координаты). TMU>Условно говоря, тысяча точек, образующих этакое облако. Как посчитать объем? TMU>Максимальная точность необязательна, +-10% вполне устроит.
можно методом Монте-Карло, тогда задача сведётся к определению положения точки относительно тела: внутри/снаружи
Здравствуйте, TMU_2, Вы писали:
TMU>Тело задано набором точек (у каждой по три координаты). TMU>Как посчитать объем? TMU>P.S. Точки — не только на поверхности, они более-менее равномерно по всему объему распределены.
Вероятно, сначала нужно найти выпуклую оболочку.
Потом можно из какой-нибудь точки внутри выпуклого многогранника построить пирамидки к каждой грани и просуммировать их объёмы.
Здравствуйте, TMU_2, Вы писали:
TMU>Тело задано набором точек (у каждой по три координаты). TMU>Условно говоря, тысяча точек, образующих этакое облако. Как посчитать объем? TMU>Максимальная точность необязательна, +-10% вполне устроит. TMU>P.S. Точки — не только на поверхности, они более-менее равномерно по всему объему распределены.
Если более-мене равномерны по объёму. То методом монте-карло ограничиваем объём прапараллелепипедом или сферой. Генерим произвольные точки
если они ближе порога к любой точке облаке считаем попали если дальше мимо. Отношение попаданий к общему количеству на объём ограничивающей фигуры получим результат.
Вариант 2 надо построить поверхность и потом используя теорему Остраградского-Гауса свести объём к суммированию по поверхности. Но поверхности бывают очень замысловатые
например кружка из под кофе. И обычной выпуклой оболочкой не обойтись.
Вариант 3 выбираешь произвольную ось вдоль облака точек и нарезаешь слоями. в каждом слое вычисляешь площадь попавших точек в это срез, умножаешь на высоту и складываешь.
В результате будет объём. Варьируя оси и способы вычисления площади на срезах можно получить разные оценки и прикинуть ошибку.
Для вычисления площади среза тоже можно выполнять разными методами. Например размыть точки и по порогу построить границу. Или просто нарезать сеткой n*m и смотреть попали нет.
ps: как бы все эти методы имеют сходимость хуже sqrt(n) где n-кол-во точек и кучу подгоночных параметров. Так что точек должно быть много.
TMU>>Тело задано набором точек (у каждой по три координаты). TMU>>Как посчитать объем? TMU>>P.S. Точки — не только на поверхности, они более-менее равномерно по всему объему распределены. Q>Вероятно, сначала нужно найти выпуклую оболочку. Q>Потом можно из какой-нибудь точки внутри выпуклого многогранника построить пирамидки к каждой грани и просуммировать их объёмы.
Спасибо за слова Convex hull ))
Если кому нужно, это реализовано в scipy.spatial, ConvexHull
Моя задача решается трем строчками на питоне.
Здравствуйте, TMU_2, Вы писали:
TMU>Спасибо за слова Convex hull )) TMU>Если кому нужно, это реализовано в scipy.spatial, ConvexHull TMU>Моя задача решается трем строчками на питоне.
Решал такую задачу в универе, в варианте 2D. На ассемблере. Было больно
FPU тогда не было, всё целочисленным счётом. Вышло тыщи 3 строк, но сдал успешно.