Menyusul dari pertanyaan saya sebelumnya : Saya memiliki bola yang cukup realistis memantul dari permukaan yang terkena. Sekarang saya ingin membuatnya berputar dari gesekan hit .
Menunjukkan ini cukup sederhana: Saya memutar bola dengan kecepatan sudutnya setiap tick dan menerapkan rotasi yang sama saat ditampilkan.
Ketika bola menabrak dinding, saya tahu bahwa kecepatan rotasi dipengaruhi oleh ...
- kecepatan awal bola saat mengenai permukaan
- yang koefisien gesekan bola dan permukaan (konstanta fisik)
- yang sudut datang (sudut antara vektor kecepatan masuk bola dan permukaan normal).
Sudut kejadian diperkirakan oleh produk titik dari bola dampak dan vektor kecepatan keluar. (1 berarti putaran tinggi, -1 berarti putaran, dan semua yang lainnya relatif di antaranya)
Mengalikan semua hal di atas bersama-sama dan memastikan mereka kemudian ditransformasikan ke kisaran 0 - 1, dan dikalikan dengan kecepatan rotasi maks, bola tampaknya merespons dalam kecepatan rotasi seperti yang diharapkan. Kecuali untuk satu hal: Itu akan selalu berputar dengan bijaksana (karena nilai-nilai positif).
Apakah ini metode yang bagus? Bisakah Anda memikirkan cara yang lebih sederhana?
Jika metode ini tampak baik-baik saja, apa yang saya lewatkan? Bagaimana saya tahu kapan bola harus berputar berlawanan arah jarum jam?
sumber
Pertama dapatkan garis singgung permukaan dari permukaan normal: t = (ny, -nx)
Kemudian Anda bisa mendapatkan komponen kecepatan di sepanjang permukaan sebagai vt = v dot t .
Sekarang Anda dapat menghitung rotasi bola: w = | ( normal * r) silang vt |, di mana r adalah jari-jari bola.
Di sini saya menganggap bola tidak memiliki inersia rotasi dan mulai berputar secara instan pada kecepatan yang akan terjadi jika bola itu menggelinding di sepanjang permukaan. Anda dapat menggunakan koefisien gesekan untuk membuatnya lebih realistis dan, jika Anda mau, pertimbangkan inersia rotasi bola.
sumber
Baiklah, ini mungkin terdengar bodoh tetapi Anda tidak menggunakan produk titik dari vektor bola dan permukaan normal dan hanya melakukan arccos untuk menghitung sudutnya, bukan? Karena maka sudut akan menjadi positif apakah itu positif (hingga 90 derajat) atau negatif (idem) sebagai cosinus simetris sekitar 0.
Jika ini adalah terjadi maka bukan menggunakan normal pesawat, menggunakan arah pesawat itu sendiri dan kurangi 90 derajat dari sudut, jadi 0 hingga 180 akan menjadi -90 hingga +90 derajat (atau -half PI hingga + setengah PI jika Anda cenderung radial).
sumber
Hal pertama yang Anda perlu alamat adalah apakah kecepatan putaran atau putarannya sebelum mengenai dinding; katakanlah Si; lebih besar, sama atau lebih rendah dari nilai yang dibutuhkan untuk mempertahankan putaran yang sama setelah memukul, katakan Ss. Dengan ini Anda bisa mendapatkan yang sebenarnya setelah memukul berputar, katakan Se, menggunakan nilai gesekan antara bola dan permukaan
Dapatkan komponen kecepatan melintasi permukaan yang memantul Vxi = Vi dot Vx, menjadi Vx vektor paralel ke permukaan dengan magnitudo 1.
Nilai yang Anda cari adalah Ss = Vxi / r, ini untuk mengubah Vxi menjadi kecepatan sudut. Jika Si lebih rendah dari Ss, bola harus mendapatkan putaran positif. Jika Si sama dengan Ss, bola harus tetap berputar kira-kira sama, tentang ini nanti. Jika Si lebih besar dari Ss, bola harus kehilangan putaran
kehilangan dan perolehan kecepatan tergantung pada nilai friksi Fr. Sebenarnya itu adalah persilangan antara jari-jari dan hte gaya gesekan, tetapi Anda dapat mengatur nilai itu seperti yang Anda inginkan.
Anda juga harus memperhatikan bahwa selain bounce coef, bola kehilangan energi karena gesekan antara bola dan permukaan, sehingga Vxi terpengaruh secara negatif. Saya akan mengatakan bounce coef mempengaruhi Vy dan gesekan mempengaruhi Vx.
Anda harus memperhitungkan deformasi bola. Ini akan mempengaruhi waktu atau bingkai bola menempel ke dinding, sehingga gaya fraksinya akan lebih lama mempengaruhi putaran dan kecepatan keluar. Deformasi ini bergantung pada bagaimana Anda ingin model Anda menjadi.
sumber