Saya bertanya-tanya apakah seseorang memiliki cara yang elegan untuk menghitung skenario berikut.
Saya memiliki objek (n) jumlah kotak, bentuk acak, tetapi kita akan berpura-pura mereka semua persegi panjang.
Kita berhadapan tanpa gravitasi, jadi pertimbangkan objek di ruang angkasa, dari perspektif top-down. Saya menerapkan gaya pada objek di kotak tertentu (seperti yang diilustrasikan di bawah).
Bagaimana cara menghitung sudut rotasi, berdasarkan gaya yang diterapkan, di lokasi yang diterapkan. Jika diterapkan di tengah, itu akan lurus. Bagaimana seharusnya berperilaku semakin jauh saya pindah dari pusat? Bagaimana cara menghitung kecepatan rotasi?
Jawaban:
Anda mencoba menghitung Torsi. Torsi tergantung pada gaya yang diberikan F, titik aplikasi, dan pusat massa benda.
1) Pusat Massa . Tentukan pusat massa objek.
2) Titik Penerapan : Tetapkan titik di mana gaya bekerja.
3) Moment Arm : Jarak antara dua titik yang ditentukan di atas.
4) Gaya sudut : Bagilah gaya F Anda menjadi dua vektor ortogonal, satu Paralel dengan garis dalam 3) dan satu Perpendicular. Komponen paralel tidak mempengaruhi momentum sudut. Yang tegak lurus tidak. Anda dapat menghitung komponen paralel dengan proyeksi vektor. Anda dapat mengurangi itu dari yang asli untuk mendapatkan komponen tegak lurus. Dalam pseudocode (
dot
berarti dot-produk)5) Torsi : Komponen gaya tegak lurus dikalikan dengan panjang lengan momen.
Untuk beralih dari Torsi ke kecepatan sudut:
1) Momen Inersia : Definisi berapa banyak inersia rotasi yang dimiliki suatu objek. Sebagai contoh, dibutuhkan lebih banyak torsi untuk memutar batang panjang daripada bola dengan massa yang sama. Jika Anda tidak peduli dengan realisme, Anda dapat berpura-pura momen inersia relatif terhadap massa, atau Anda bisa mengabaikan bentuk dan massa objek sepenuhnya.
2) percepatan sudut :
3) Kecepatan Sudut : Kecepatan sudut akan terus meningkat selama torsi diterapkan. Jadi rumus kira-kira akan menjadi "Kecepatan Sudut pada saat T adalah jumlah kumulatif percepatan Angular hingga T. " Ini dinyatakan dalam pseudocode sebagai
sumber
orientation += angularVelocity * elapsedSeconds
adalah salah karena terlalu melebih-lebihkan kecepatan pada langkah waktu, yang berarti bahwa framerate yang berbeda akan memberikan orientasi yang berbeda. Sebuah formula yang tepat akan menjadi:float oldVelocity = angularVelocity; angularVelocity += angularAcceleration * elapsedSeconds; orientation += 0.5f * (angularVelocity + oldVelocity) * elapsedSeconds;
. Juga, karena tidak ada gravitasi, saya sarankan menggunakan "pusat massa" sebagai gantinya. +1 untuk penjelasan yang sangat bagus.jika gaya tidak terlalu kuat akan jauh lebih mudah untuk mensimulasikan rotasi menggunakan banyak titik dan pegas yang menghubungkannya. dalam hal ini Anda hanya menganggap bentuk Anda terdiri dari beberapa titik yang dihubungkan oleh pegas. setiap titik mewakili massa dan semua benda lainnya memiliki massa sama dengan nol.
pada gambar di atas, titik hitam mewakili massa dan garis merah mewakili pegas. lalu untuk menerapkan gaya Anda hanya perlu menerapkannya ke titik terdekat dan Anda akan melihat objek Anda akan berputar seperti yang Anda inginkan. untuk membuat bentuk Anda terlihat seperti struktur yang solid lebih baik untuk mendefinisikan mata air dengan nilai redaman tinggi dan nilai k tinggi.
sumber