Трохи складне і тривале запитання, яке, зізнаюся, я ще не дуже добре розумію, тому спробую і пояснити якнайкраще.
Коротка версія: Чи існує загальна формула c ++ / physx для обчислення тензорів інерції на основі форми об'єктів?
Довга версія: Для нашої фізики нам потрібно вказати тензори інерції x, y та z. В даний час так, як ми це робимо, це майже просто співвідношення, виходячи з маси. Отже, якщо об’єкт довгий на осі X і тонкий на Y і Z, а маса 10000, ми встановимо Z і Y на 7000 і X на 3000. (Це не точно, але просто для того, щоб дати уявлення)
Це працює досить добре, але наша найбільша проблема полягає в тому, що десь є спільна нестабільність, ми повинні продовжувати здогадуватися про тензори, поки не з'ясуємо, що найкраще працює. Це може зайняти багато часу, якщо у нас дуже велике фізичне моделювання, і один з 20+ суглобів змушує всі інші втрачати стабільність.
Я працюю над функцією, яка візьме обмежувальний ящик об'єкта і, сподіваємось, обчислить відносно точні тензори. Я взяв частину математики з http://en.wikipedia.org/wiki/List_of_moment_of_inertia_tensors і зробив функцію, яка в основному працює як наступна для подібних обертів нижче.
Або якщо обертання закінчується, наприклад:
Отже, це, здається, дає мені результати, подібні до того, як ми це робили, але я не хочу переходити на цей спосіб, не переконуючись, що він працюватиме для загального використання. Нижче наведено код для моєї функції на основі першого зображення з кутом та центром.
NxVec3 CalculateInertiaTensor( VisBoundingBox_cl boundingBox, float m )
{
float width = boundingBox.GetSizeX();
float height = boundingBox.GetSizeZ();
float depth = boundingBox.GetSizeY();
float xTensor = 0.083f * m*(height*height + depth*depth);
float yTensor = 0.083f * m*(width*width + depth*depth);
float zTensor = 0.083f * m*(width*width + height*height);
return NxVec3(xTensor, yTensor, zTensor);
}
Я не можу гарантувати, що це правильний спосіб зробити це (оскільки найточнішим способом є використання фактичної форми замість обмежувального поля), і я не дуже знайомий з тенерами інерції та математикою, але, здається, повертає цифри досить схожий на те, що ми використовували. Хтось тут трапляється знати, чи є кращий спосіб зробити це?