Sedikit pertanyaan yang rumit dan panjang yang, saya akui, saya belum cukup mengerti sehingga saya akan mencoba dan menjelaskan sebaik mungkin.
Versi Pendek: Apakah ada rumus c ++ / Physx umum di luar sana untuk menghitung tensor inersia berdasarkan bentuk objek?
Versi Panjang: Untuk fisika kita, kita perlu menentukan tensor inersia x, y dan z. Saat ini cara kita melakukannya cukup banyak hanya berdasarkan rasio massa. Jadi jika sebuah objek panjang pada sumbu X dan tipis pada Y dan Z, dan massanya adalah 10.000, kita akan mengatur Z dan Y menjadi 7000 dan X hingga 3000. (Ini tidak tepat, tetapi hanya untuk memberikan ide)
Ini bekerja relatif baik tetapi masalah terbesar kami adalah ketika ada ketidakstabilan bersama di suatu tempat, kami harus terus menebak pada tensor sampai kami menemukan yang terbaik. Ini bisa menjadi sangat memakan waktu jika kita memiliki simulasi fisika yang sangat besar dan satu dari 20+ sambungan menyebabkan semua yang lain kehilangan stabilitas.
Apa yang saya kerjakan adalah fungsi yang akan mengambil kotak pembatas objek dan mudah-mudahan menghitung tensor yang relatif akurat. Saya telah mengambil beberapa matematika dari http://en.wikipedia.org/wiki/List_of_moment_of_inertia_tensors dan membuat fungsi yang pada dasarnya berfungsi seperti berikut untuk rotasi serupa di bawah ini.
Atau jika rotasi berakhir, seperti ini:
Jadi, ini sepertinya memberi saya hasil yang mirip dengan cara kami melakukannya, tapi saya tidak ingin beralih ke cara ini tanpa memastikan bahwa itu akan berfungsi untuk penggunaan umum. Di bawah ini adalah kode untuk fungsi saya berdasarkan gambar pertama dengan kubus dan poros tengah.
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);
}
Saya tidak dapat menjamin bahwa ini adalah cara yang tepat untuk melakukannya (karena cara yang paling akurat adalah dengan menggunakan bentuk aktual alih-alih kotak pembatas) dan saya tidak terlalu terbiasa dengan tensor inersia dan matematika tetapi tampaknya mengembalikan angka cukup mirip dengan apa yang kami gunakan. Adakah yang tahu kalau ada cara yang lebih baik untuk melakukan ini?