Вычислить объем конструктивной твердотельной геометрии

У меня есть конструктивная твердотельная геометрия эллипсоидов, которые разрезают куб. Мне нужно вычислить объем пористого куба. Как я могу это сделать?


person user3528789    schedule 21.02.2015    source источник


Ответы (1)


Всегда есть глупое аппроксимирующее решение. Для этого вам нужна только решающая функция, находится ли точка внутри эллипсоида.

Держите куб

  • Измерение (возможно, только один раз вне класса, внешнее измерение)
  • наполнение: с состоянием: пустой, заполненный, смешанный
  • если смешать 8 sub-Cube-s
  • есть минимальный размер блока

Тогда заполнение эллипсоидом разобьёт кубы, а смешанные кубы (немного заполненные) потребуют разбиения для более точного расчёта.

Сам алгоритм может быть разным. Масштабирование до (0, 0, 0) - (2”, 2”, 2”) может быть полезным, поскольку блоки выполняют логарифмическое деление пространства.

В конце этого вычисления у вас есть приближение и даже известен диапазон ошибок (сумма заполненных + половина суммы смешанных).


Один из способов — рекурсивно выполнить это из всего куба, проверив перекрытия с 8 вложенными кубами:

  • Когда все 8 углов куба находятся внутри эллипсоида, он заполнен, и вам не нужно рекурсивно переходить к минимальному размеру блока.
  • Когда все 8 углов находятся снаружи и центр эллипсоида не лежит внутри, он пуст, конец рекурсии.
person Joop Eggen    schedule 21.02.2015
comment
Привет, Йооп. Я не совсем понял предложенный вами алгоритм. Что вы подразумеваете под размерностью (может быть, только один раз вне класса). Как вы надежно проверяете, является ли состояние пустым, заполненным, смешанным? Если я возьму, например, центр коробки и сверюсь с эллипсоидом, может получиться так, что я получу пустое пространство, но коробка по-прежнему будет иметь общий объем с эллипсоидом. - person user3528789; 21.02.2015
comment
Измерение экземпляра куба не обязательно хранить в виде поля, но его можно вычислить при рекурсии из верхнего куба. как параметр рекурсивного метода. Уменьшает размер данных. - person Joop Eggen; 21.02.2015
comment
Привет, Джуп. Я много думал о построении и октодереве, но я до сих пор не знаю, как проверить, является ли куб из октодерева пустым/заполненным или смешанным. У меня есть инструмент, чтобы проверить, находится ли точка внутри эллипсоида или нет. Теперь, если я хочу получить состояние октодерева-куба (например, куба A), я подумал о том, чтобы ввести сетку точек в кубе A с равным расстоянием глобального минимального размера блока между точками. Теперь я бы проверил все точки внутри эллипсоида или нет. Но тогда это тот же подход, что и в воксельно-дискретизированной геометрии. Так где я думаю неправильно? - person user3528789; 22.02.2015
comment
Хорошо, что вы знаете общие структуры данных, например, октодерево. Я не хотел побеждать новичка со структурами данных, которые немного перегружены с технической стороны, без целенаправленного использования, - person Joop Eggen; 23.02.2015
comment
Привет, Йооп, спасибо за расширенное описание, но все же при таком подходе можно было бы пропустить много кубов с небольшим объемом внутри эллипсоида. Рассмотрим ситуацию, когда вершина эллипсоида вращения пересекается с кубом в середине грани куба, причем сама вершина еще не находится в центре куба. Так что мне пришлось бы снова использовать маленькие кубики, чтобы обойти это, что возвращает меня к вокселям. Я думаю, лучше сделать что-то вроде теста на пересечение эллипсоида. Тогда это будет дорого с вычислительной точки зрения. Итак, снова вернемся к вокселям :( или я что-то упускаю. - person user3528789; 23.02.2015
comment
Полностью внутри (центр эллипсоида внутри) и полностью снаружи быстр. Да, остальные случаи требуют изобретательского подхода. Возьмите ограничивающую рамку эллипсоида и обработайте пересечения большими и меньшими кубами. Другой восходящий подход заключается в выборе мин. куб на поверхности эллипсоида и добавьте к любому из 8 углов куб поверхности, рекурсивно, пока вся поверхность не будет покрыта. Внутренний тогда представляет собой проекцию на одно измерение, итерацию по всем координатам этого измерения и маркировку внутренних блоков и, возможно, создание большего куба из 4 выровненных меньших кубов. - person Joop Eggen; 23.02.2015