Как я должен создать алгоритм для центроида любой системы?Windows.Медиафайлы.Геометрический объект?

StackOverflow https://stackoverflow.com/questions/1324544

Вопрос

Я планирую разделить геометрический объект на ряд более простых фигур и объединить их центроиды, используя эту формулу:

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

УВЕДОМЛЕНИЕ: Не удивляйтесь, если мой взгляд на математику неверен.Я не занимался никакой сложной математикой, кроме тригонометрии, и мне никогда не приходилось иметь дело с греческими буквами.Я думаю, что я довольно хорошо понимаю этот вопрос, но, пожалуйста, просто дайте мне знать, если я что-то неправильно понял.

Информационная записка:центр тяжести геометрической фигуры или призмы - это не просто середина фигуры.Это центр тяжести, или центр масс.Я предполагаю, что геометрические объекты также могут инкапсулировать 3D-призмы, поэтому мне, возможно, придется принять это во внимание в будущем, но сейчас я фокусируюсь только на 2D-геометрии.Для двумерной фигуры вы должны представить, что это жесткий лист бумаги заданной формы, а центр тяжести будет точкой, в которой этот лист бумаги будет балансировать на игле.

Первая проблема, с которой я сталкиваюсь, заключается в том, что мне нужно найти способ точно разбить любой заданный геометрический объект на достаточно простые формы, чтобы эта формула могла работать корректно.У кого-нибудь есть какие-нибудь идеи, как это можно было бы сделать?Или есть лучшая процедура, которая по-прежнему будет работать повсеместно?

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

Это было полезно?

Решение

Тесселяция или дискретизация произвольных двумерных плоских фигур является распространенной проблемой в конечно-элементном анализе.Обычно это делается с помощью плоских треугольников или четырехугольников.Попробуйте поискать в Google по "генерация 2d сетки конечных элементов" или генерация сетки quadtree или octree.Вы можете вычислить центр тяжести каждой простой фигуры и применить (правильную) формулу, которую вы привели.

Что -то вроде это.Или эти.Конечно, вам пришлось бы предоставить исходную геометрию для рассматриваемого тела.

Тебе предстоит еще долго возиться с мотыгой.Вам нужно будет выполнить все следующие действия:

  1. Найдите программу автоматического построения сетки и узнайте, как ввести геометрию для вашей 2D-фигуры.
  2. Запустите автоматическую сетку и получите результат сетки, который будет состоять из всех 2D точек в пространстве и связей всех треугольных и четырехугольных элементов.
  3. Напишите программу для чтения в сетке и вычисления площади и центроида каждого элемента.
  4. Подключите эти значения к приведенной вами формуле, чтобы вычислить центр тяжести вашей исходной 2D-фигуры.Это означает перебор всех элементов и накопление площадей как произведений координат (x, y) центроида каждого элемента на его площадь.
  5. Как только у вас будет ответ, вам нужно проверить сходимость.Вы делаете это, уточняя свою сетку, уменьшая размеры элементов и пересчитывая их заново.Вы знаете, что пришли к сходимости, когда уточняете сетку и ответы меняются менее чем на небольшой допуск (5% или столько, сколько вы готовы терпеть).

Это все еще изрядный объем работы.

Обновить: Этот выглядит довольно неплохо, и у него открытый исходный код.

Другие советы

У меня нет никакого кода для этого, но я видел, где фигура была мозаичной (в данном случае с использованием триангуляция полигонов) таким образом, у вас получился бы хороший набор треугольников.Затем вычислите объединенный центроид на основе средневзвешенного значения центроида треугольников.

Редактировать:

Есть блог ребят, работающих над продуктом под названием Insight3D автор: AGI.В этом запись, они говорят о триангуляции.Это может помочь вам сделать это, поскольку они дают еще несколько указаний на алгоритмы.В зависимости от вашего использования, вы можете использовать его повторно один из их числа реализации.Он бесплатен для разработки и некоммерческого использования.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top