İtiraf edeceğim, henüz çok iyi anlamıyorum, bu yüzden olabildiğince iyi açıklamaya çalışacağım, karmaşık ve uzun bir soru.
Kısa Versiyon: Bir cisim şekline dayalı atalet tensörlerini hesaplamak için genel bir c ++ / physx formülü var mı?
Uzun Versiyon: Fizik için x, y ve z atalet tensörlerini belirtmemiz gerekiyor. Şu anda bunu yapma şeklimiz kütleye dayalı bir orandır. Bir nesne X ekseninde uzun ve Y ve Z üzerinde ince ise ve kütle 10000 ise, Z ve Y'yi 7000 ve X'i 3000'e ayarlayacağız. (Bu kesin değil, sadece bir fikir vermek için)
Bu nispeten iyi çalışıyor, ancak en büyük sorunumuz bir yerde ortak kararsızlık olduğunda, neyin en iyi olduğunu anlayana kadar tensörlerde tahmin etmeye devam etmemiz gerekiyor. Çok büyük bir fizik simülasyonumuz varsa ve 20+ eklemden biri diğerlerinin stabilitesini kaybetmesine neden oluyorsa, bu çok zaman alıcı olabilir.
Üzerinde çalıştığım şey, bir nesnenin sınırlayıcı kutusunu alacak ve umarım nispeten doğru tensörleri hesaplayacak bir işlevdir. Bazı matematik http://en.wikipedia.org/wiki/List_of_moment_of_inertia_tensors aldım ve temelde aşağıdaki benzer rotasyonlar için aşağıdaki gibi çalışan bir işlev yaptım.
Veya rotasyon bir sondaysa, şöyle:
Yani, bu bana bunu yapma şeklimize benzer sonuçlar veriyor gibi görünüyor, ancak genel kullanım için çalışacağından emin olmadan bu yola geçmek istemiyorum. Küp ve orta pivotlu ilk görüntüye dayanan fonksiyonumun kodu aşağıdadır.
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);
}
Bunu yapmanın doğru yolu olduğunu garanti edemiyorum (en doğru yol sınırlayıcı bir kutu yerine gerçek şekli kullanmaktır) ve atalet tensörleri ve matematiğe çok aşina değilim ama sayıları döndürüyor gibi görünüyor kullandıklarımıza oldukça benzer. Burada daha iyi bir yol olup olmadığını bilen var mı?