Как я могу вычислить массу и момент инерции многогранника? - PullRequest
5 голосов
/ 01 мая 2009

Для использования в моделировании твердого тела я хочу вычислить тензор массы и инерции (момент инерции), учитывая треугольную сетку, представляющую границу (не обязательно выпуклого) объекта, и предполагающую постоянную плотность внутри.

Ответы [ 5 ]

9 голосов
/ 01 мая 2009

Предполагая, что ваш тримеш закрыт (независимо от того, выпуклый он или нет), есть способ!

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

Итак, для начала выберите некоторую контрольную точку (начало координат в координатах модели будет работать нормально), она даже не должна находиться внутри тела. Для каждого треугольника соедините три точки этого треугольника с контрольной точкой, чтобы сформировать тетраэдр. Вот хитрость: используйте нормаль поверхности треугольника, чтобы выяснить, направлен ли треугольник к или от контрольной точки (что можно найти, посмотрев на знак точечного произведения нормали и вектор, указывающий на центроид треугольника). Если треугольник направлен в сторону от контрольной точки, относитесь к его массе и моменту как обычно, но если он обращен к контрольной точке (предполагая, что между контрольной точкой и твердым телом есть свободное пространство), сведите на нет свои результаты для этой точки .

Эффективно то, что это делает, это пересчитывает куски объема и затем исправляет, как только эти области оказываются не частью твердого тела. Если в теле много жирных фланцев и гротескных складок (получилось это изображение?), Конкретный кусок объема может быть пересчитан из-за здоровенного фактора, но он будет вычтен только достаточно раз, чтобы отменить его, если ваша сетка закрыто. Работая таким образом, вы даже можете обрабатывать внутренние пузырьки пространства в ваших объектах (при условии, что нормали установлены правильно). Кроме того, каждый треугольник может обрабатываться независимо, поэтому вы можете распараллеливать по желанию. Наслаждайтесь!

Запоздалая мысль: Вас может удивить, что произойдет, когда этот точечный продукт даст вам значение на уровне или около нуля. Это происходит только в том случае, если треугольная грань параллельна (ее нормаль перпендикулярна) в направлении к контрольной точке, что в любом случае происходит только для вырожденных тет с небольшой или нулевой площадью. То есть решение добавить или вычесть вклад тета сомнительно только тогда, когда тет не собирался ничего вносить.

1 голос
/ 13 марта 2011

Об этом рассказывается в книге Д. Эберли «Физика игры, второе издание». глава 2.5.5 и пример кода доступны онлайн. (Просто нашел, еще не попробовал.)

Также обратите внимание, что многогранник не должен быть выпуклым для работы формул, он просто должен быть простой .

1 голос
/ 17 мая 2009

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

Начните как обычно в Википедии, а затем перейдите на страницу внешних ссылок для дальнейшего чтения.

(Для тех, кто не знаком с интеграцией Монте-Карло, вот как вычислить массу. Укажите точку в содержащем гиперкубе. Добавьте к счетчику point_total. Это в многограннике? Если да, добавьте к point_internal counter. Делайте это много (см. оценки сходимости и оценки ошибок.) Тогда

mass_polyhedron/mass_hypercube \approx points_internal/points_total.

Для момента инерции каждый вес вычитается на квадрат расстояния точки до оси отсчета.

Сложная задача - проверить, находится ли точка внутри или снаружи многогранника. Я уверен, что для этого есть алгоритмы вычислительной геометрии.

1 голос
/ 01 мая 2009

Разложите ваш объект на набор тетраэдров вокруг выбранной внутренней точки. (Это твердое тело, использующее каждый треугольный элемент лица и выбранный центр.)

Вы должны быть в состоянии найти объем каждого элемента. момент инерции также должен быть доступен.

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


Кажется, я не помнил по номенклатуре, и перекос - не прилагательное, которое я хотел Я имею в виду нерегулярные.

1 голос
/ 01 мая 2009

Я бы взглянул на vtkMassProperties. Это довольно надежный алгоритм для вычисления этого, учитывая поверхность, охватывающую объем.

...