Bagaimana cara menghitung rotasi yang disebabkan oleh gesekan pantulan?

15

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?

codemonkey
sumber

Jawaban:

2

Metode Anda baik, karena sangat sederhana. Satu hal yang mungkin Anda butuhkan adalah ketergantungan pada putaran sebelumnya pada bola, yang tidak Anda perhitungkan. Bola berputar mewakili energi rotasi, sehingga simulasi realistis mungkin harus melestarikannya bersama dengan energi lain.

Namun, jika bola tidak berputar saat tumbukan, saya tidak bisa membayangkan situasi di mana ia mulai berputar melawan arah sudut datang. Artinya, "searah jarum jam" atau "berlawanan arah jarum jam" harus relatif terhadap sisi mana pun dari normal sudut kejadiannya.

Saya pikir hanya mengalikan hasilnya dengan vektor x-direction asli (+1 jika bepergian dari kiri ke kanan, -1 jika bepergian dari kanan ke kiri) harus melakukannya.

Sunting: Anda dapat menggunakan produk silang untuk ini. Incident cross normalmenyediakan vektor dalam arah Z saja (jika kita berada di bidang xy 2D). Lihatlah elemen-z: jika positif, pendekatan bola harus membuatnya berputar searah jarum jam. Jika negatif, bola harus berputar berlawanan arah jarum jam.

eli
sumber
Hei eli Pertama, saya mempertimbangkan putaran asli bola, hanya lupa menyebutkannya di posting saya. Kedua, saya tidak berpikir bahwa sistem arah-x akan bekerja. Saya mencobanya, tetapi jika bola menyentuh permukaan dari bawah ke kiri, vektor x akan menjadi -1, itu berarti rotasi berlawanan arah jarum jam, sementara pada kenyataannya itu harus berputar dengan bijaksana
codemonkey
Bagaimana Anda memperhitungkan putaran asli bola? Jika berputar sangat cepat, itu mungkin meluncur sendiri ke arah yang sama sekali berbeda. Masalah dengan dot-produk dalam kasus Anda adalah bahwa ia menggunakan cosine (fungsi genap). Anda perlu sesuatu yang lain untuk mengatur tanda hubungan antara vektor Anda (kejadian dan normal). Anda dapat menggunakan produk-silang (produk vektor) untuk tujuan ini. Saya telah mengedit jawaban saya untuk memasukkan metode lintas-produk.
eli
membaca kembali jawabannya setelah diedit saya suka. Mencobanya dan bekerja dengan cukup baik. Mengenai putaran asli, saya hanya berbicara tentang membuat perubahan rotasi bertahap ... seperti untuk putaran asli yang mempengaruhi vektor keluar, well, itulah langkah saya berikutnya :)
codemonkey
Aduh, hasil edit adalah salah satu dari 3 solusi berbeda yang saya sarankan, dan saya jelaskan mengapa Anda harus melakukannya (titik hanya memberi besarnya, bukan arah sudut). Sayangnya, saya kira harus lebih ringkas.
Kaj
maaf untuk kaj itu, itu menyelinap saya ... jangan tersinggung :)
codemonkey
3

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.

Danik
sumber
Terima kasih atas jawaban Danik. Saya sudah mempertimbangkan inersia rotasi bola (dengan menambahkannya ke rotasi baru) dan juga gesekan permukaan sebagai koefisien yang akan dikalikan dengan kecepatan putaran total. Semakin banyak gesekan, semakin tinggi kecepatan rotasi, bukan?
codemonkey
2

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).

Kaj
sumber
Nah, pertimbangkan kasus ini: x + ve benar, y + ive turun; Vektor permukaan S = (1,0); kami memiliki dua vektor kecepatan dampak V1 = (3,4) memukul dari atas, harus memutar bola-bijaksana & V2 = (3, -4) memukul dari bawah, harus memutar bola anti-bijaksana. Sekarang normals untuk kedua vektor adalah (3 / 5,4 / 5) & (3/5, -4 / 5). Sekarang produk titik untuk kedua vektor adalah 3/5. sudut yang dihasilkan adalah arccos (3/5) = 53 derajat untuk KEDUA vektor. Yang benar, tetapi di sisi yang berlawanan! jadi jika saya menggunakan metode ini, saya masih akan berakhir dengan keduanya menyebabkan rotasi clock-wise. Lihat dilema saya?
codemonkey
3 kemungkinan solusi. 1) Jangan gunakan normal tetapi arah samping dan kurangi 90 derajat seperti yang disebutkan di atas. 2) Simulasikan yang sama dengan menukar x dan y dari yang normal dan membalik (kalikan dengan -1). 3) Lipat gandakan sudut dengan tanda produk silang dari dua vektor karena produk silang mewakili dosa sudut yang tidak simetris sekitar 0 derajat.
Kaj
Produk titik tidak memberi Anda sudut, hanya besarnya sudut, Anda juga perlu arah sudut. Semua 3 cara di atas mensimulasikan menggunakan sinus memberi Anda sisi. Anda juga bisa menggunakan trigonometri dasar untuk mendapatkan sudut. Dosa (alfa) = sisi berlawanan panjang / sisi miring panjang (berdasarkan segitiga dengan satu sudut 90 derajat antara sisi berlawanan dan sisi miring). Itu dan pythagoras untuk menghitung panjang sisi akan dilakukan.
Kaj
Ngomong-ngomong, baca kembali jawaban asli saya, karena ini memecahkan dilema dengan mengambil sudut dengan bidang, bukan yang normal dan mengurangi 90 derajat.
Kaj
0

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.

Aprah
sumber