Beberapa hal berbeda. Pertama, kita perlu menyadari bahwa ini adalah masalah yang tidak terbatas. Yaitu, ada banyak kombinasi pendorong yang dapat menembak untuk menghasilkan rotasi dalam arah yang sama. Saya berasumsi bahwa dalam situasi Anda hanya ada dua negara untuk pendorong, "on", dan "off", dan semua pendorong menghasilkan kekuatan yang sama.
Kedua, mengamati model Anda, sepertinya "pusat massa" Anda sebenarnya bukan pusat massa Anda. Untungnya, ini tidak akan mempengaruhi perhitungan Anda untuk torsi. Namun, itu akan mempengaruhi perhitungan Anda untuk pusat perpindahan massa. Saya tidak yakin apakah Anda peduli tentang akurasi pada tingkat itu, karena "pusat massa" Anda setidaknya adalah kuadrat terdekat dengan pusat massa sebenarnya.
Ketiga, jika Anda ingin menghitung bagaimana pendorong tertentu akan mempengaruhi rotasi, Anda sudah benar, meskipun Anda menggunakan formula yang tidak efisien. Torsi dapat dihitung sebagai r x F
, yang memiliki magnitudo r*F*sin(theta)
. Namun, menghitung sudut dalam kasus ini adalah metode yang tidak efisien. Sebagai gantinya, Anda harus menggunakan definisi lintas-produk torsi secara langsung, karena ini akan jauh lebih mudah menggunakan representasi yang Anda miliki. Karena semua vektor Anda tidak memiliki komponen z, rumus untuk produk silang sangat disederhanakan.
Tanpa mengubah hasil perhitungan Anda sama sekali, kami hanya dapat memperbarui kode Anda
private function thrustTorque():Float
{
var torque = distToCOM.x*dir.y-distToCOM.y*dir.x;
return torque;
}
Itu jauh lebih bagus (dan lebih cepat).
Anda menyarankan dalam jawaban Anda sendiri bahwa solusi Anda adalah menembakkan semua pendorong dengan torsi ke arah yang benar. Sekarang, itu cukup banyak memecahkan pertanyaan yang Anda ajukan. Namun, saya berharap bahwa beberapa titik di sepanjang garis, Anda akan menemukan bahwa strategi Anda tidak begitu memuaskan, jika pengguna menekan tombol "putar", dan semua pendorong dengan putaran torsi positif, berpotensi memindahkannya di atas memutar mereka (saya tidak yakin tingkat detail simulasi Anda, jika Anda benar-benar menghitung kekuatan dari pendorong, atau jika Anda hanya secara visual menunjukkan mereka menembak dan kemudian memutar model Anda dengan akselerasi konstan atau sesuatu. cara, Anda ingin pendorong menembak setidaknya sekitar akurat).
Anda tidak mempertimbangkan kekuatan total di kapal. Jika Anda memiliki jumlah pendorong yang sewenang-wenang, maka ini bisa berubah menjadi masalah yang cukup rumit. Namun, karena pendorong kami hanya memiliki dua kondisi, cukup sederhana untuk dianalisis. Saya tidak yakin apa tujuan kami di sini, jadi saya bisa membayangkan dua yang berbeda: pertama, kami ingin meminimalkan kekuatan total, sambil tetap menjaga torsi ke arah yang kami inginkan. Kedua, kami ingin memaksimalkan rasio torsi terhadap kekuatan total.
Sebagai tambahan, jika Anda bisa membayangkan kontrol "volume pendorong" tambahan yang memengaruhi kekuatan semua pendorong secara bersamaan, maka Anda dapat mengatur kontrol ini sehingga dua solusi Anda memiliki torsi yang sama, dan Anda melihat bahwa solusi kedua hanya dapat memiliki perpindahan lebih kecil dari yang pertama. Namun, kita harus ingat bahwa jika memungkinkan untuk menyalakan pendorong sehingga Anda hanya memutar dan tidak bergerak sama sekali, maka kedua solusi akan sama.
Jadi, kita akan pergi dengan solusi kedua, berdasarkan argumen dari paragraf sebelumnya. Sekarang, ketika menganalisis kekuatan total, kita dapat dengan mudah mencatat bahwa hanya ada empat arah yang dapat ditunjukkan oleh mesin. Jadi total gaya dalam arah x hanyalah jumlah pendorong yang menunjuk ke kiri dikurangi jumlah yang menunjuk ke kanan, dan juga untuk arah y.
Setelah menulis sejauh ini, saya harus memikirkan lebih lanjut tentang algoritma untuk mengoptimalkannya. Saya pikir sisa posting saya sangat membantu, jadi saya mempostingnya, tetapi saya akan memperbarui ketika saya mencari cara terbaik untuk mengoptimalkan konfigurasi ini (saya sudah memikirkan beberapa cara untuk mendapatkan perkiraan jawaban, tetapi tidak satupun dari mereka yang tepat).