나는 아직 잘 이해하지 못하기 때문에 가능한 한 최선을 다하고 설명하려고 노력할 것입니다.
짧은 버전 : 객체 모양을 기반으로 관성 텐서를 계산하기위한 일반적인 c ++ / physx 공식이 있습니까?
Long Version : 물리학에서는 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);
}
이것이 올바른 방법임을 보장 할 수는 없습니다 (가장 정확한 방법은 경계 상자 대신 실제 모양을 사용하는 것입니다). 관성 텐서와 수학에 익숙하지 않지만 숫자를 반환하는 것 같습니다 우리가 사용했던 것과 상당히 비슷합니다. 여기에 더 좋은 방법이 있는지 아는 사람이 있습니까?