我承认,这是一个复杂而冗长的问题,我还不太了解,所以我将尽力解释。
简短版:是否有通用的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);
}
我不能保证这是正确的方法(因为最准确的方法是使用实际形状而不是边界框),而且我对惯性张量和数学不是很熟悉,但似乎返回数字与我们所使用的非常相似。这里有人碰巧知道是否有更好的方法吗?