Konfigurasi kapal berubah secara dinamis, jadi saya harus menentukan pendorong yang harus dihidupkan ketika saya ingin memutar kapal searah atau berlawanan arah jarum jam. Pendorong selalu poros sejajar dengan kapal (tidak pernah miring) dan baik hidup atau mati. Berikut adalah salah satu pengaturan yang mungkin:
Apa yang saya coba sejauh ini adalah memvisualisasikan vektor penembakan dan vektor arah ke pusat massa kapal:
Sayangnya, saya tidak terlalu jauh dengan itu.
mathematics
physics
migimunz
sumber
sumber
Jawaban:
Keberhasilan! Ini dia, dan itu berputar sebagaimana mestinya:
Apa yang saya lakukan adalah sebagai berikut: untuk setiap pendorong, saya menghitung besarnya torsi, dalam kaitannya dengan pusat massa.
Persamaan untuk besarnya torsi, menurut wikipedia, adalah
T = rF sin(theta)
, di mana:Ketika pemain menekan ke kiri, saya memeriksa tanda torsi untuk pendorong itu - jika kurang dari nol, saya menembakkan pendorong. Justru sebaliknya untuk memutar searah jarum jam.
Ini mungkin dapat ditingkatkan dengan menggunakan produk titik untuk menghitung cosinus sudut antara vektor, tetapi itu harus menunggu sampai besok.
Akhirnya, inilah demo langsung .
sumber
Ekspresi 3D umum untuk torsi adalah produk silang dari perpindahan dan gaya: T = r ⨯ F . Dalam dua dimensi, nilai skalar untuk torsi akan mencukupi, dan hanya diberi empat orientasi ortogonal untuk pendorong, kita dapat menulis dalam bentuk potongan-potongan:
Di sini, F adalah besarnya gaya yang dihasilkan oleh pendorong, rx dan ry adalah komponen x dan y dari vektor dari titik pivot ke thruster. Torsi positif cenderung memutar kapal berlawanan arah jarum jam. Menggunakan empat formula di atas, sepele untuk menyimpulkan tanda torsi yang dihasilkan masing-masing pendorong.
Untuk representasi fisika yang cukup akurat, Anda tidak hanya perlu mengetahui tanda dorongan, tetapi juga besarnya total dan inersia rotasi. Selain itu, Anda mungkin tidak hanya ingin mengaktifkan semua pendorong selaras dengan benar untuk melakukan rotasi.
Seperti yang ditarik, kekuatan penuh untuk pendorong B, D dan E akan memaksimalkan rotasi, tetapi juga akan mempercepat kapal ke kanan. Mematikan D akan mencegah hal ini. Jika sebaliknya, mempercepat hak dimaksudkan, tetapi rotasi searah jarum jam tidak, cara paling efisien untuk pergi adalah memungkinkan baik C dan F pada dua pertiga dari kekuatan penuh bersama dengan D.
Jika ini bukan di luar ruang lingkup apa yang Anda coba lakukan, Anda harus menulis semacam solver untuk persamaan gerak, jelas bukan tugas yang mudah.
sumber
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 magnitudor*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
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).
sumber