Bagaimana menerapkan gesekan dalam mesin fisika berdasarkan “Fisika Karakter Tingkat Lanjut”

8

Saya telah menerapkan mesin fisika berdasarkan konsep-konsep dalam teks klasik Advanced Character Physics oleh Thomas Jakobsen. Gesekan hanya dibahas dengan sangat singkat dalam artikel dan Jakobsen sendiri mencatat bagaimana "model gesekan lain dan lebih baik dari ini dapat dan harus diimplementasikan."

Secara umum bagaimana seseorang dapat menerapkan model gesekan yang dapat dipercaya di atas konsep dari artikel yang disebutkan? Dan bagaimana gesekan yang ditemukan diterjemahkan menjadi rotasi pada lingkaran?


Saya tidak ingin pertanyaan ini mengenai implementasi spesifik saya tetapi tentang bagaimana menggabungkan ide-ide Jakobsens dengan sistem gesekan yang hebat secara umum. Tapi di sini ada demo langsung yang menunjukkan kondisi mesin saya saat ini yang tidak menangani gesekan dengan cara apa pun: http://jsfiddle.net/Z7ECB/embedded/result/


Di bawah ini adalah gambar yang menunjukkan dan contoh tentang bagaimana deteksi tabrakan dapat bekerja di mesin yang berbasis di koran. Dalam integrasi Verlet posisi saat ini dan sebelumnya selalu disimpan. Berdasarkan ini posisi baru dihitung. Di setiap frame saya menghitung jarak antara lingkaran dan garis. Jika jarak ini kurang dari jari-jari lingkaran tabrakan telah terjadi dan lingkaran diproyeksikan tegak lurus keluar dari garis menyinggung sesuai dengan ukuran tumpang tindih (offset pada gambar).

Kecepatan implisit karena integrasi Verlet sehingga mengubah posisi juga mengubah kecepatan. Yang perlu saya ketahui adalah entah bagaimana menentukan jumlah gesekan pada lingkaran dan memindahkannya mundur sejajar dengan garis untuk mengurangi kecepatannya. gambar yang menunjukkan bagaimana tabrakan terjadi

paldepind
sumber
Artikel yang sangat bagus! Seperti apa gesekan Anda sekarang?
Mikael Högström
Iya. Ini artikel yang bagus. Ini sangat sederhana tetapi saya memiliki seluruh mesin yang cocok untuk tujuan saya bekerja berdasarkan itu. Kecuali gesekan;)
paldepind
Dan video yang bagus juga. Terlihat menjanjikan!
Mikael Högström

Jawaban:

4

Anda harus melihat kertas "posisi berdasarkan dinamika" Mathias Mueller et all. Ini pada dasarnya sama dengan kertas Jacobsons dan dia mungkin memberi Anda lebih banyak informasi tentang gesekan.

http://www.matthiasmueller.info/publications/posBasedDyn.pdf

Mereka menyatakan bahwa gesekan pada dasarnya mengurangi kecepatan partikel di bidang tumbukan dengan beberapa nilai skalar.

Perhatikan bahwa ini tidak memberi Anda efek gesekan coulomb (jumlah momentum ke tumbukan tidak mempengaruhi besarnya gaya gesekan) tetapi Anda mungkin bisa mendapatkannya dengan mempertimbangkan kecepatan partikel ke dalam bidang tumbukan.

Cholesky
sumber
1
Bagaimana jika, ketika menerapkan impuls ke badan yang tidak bergerak, Anda memeriksa ambang tertentu. Jika komponen impuls pada permukaan kontak lebih rendah dari ambang itu, Anda dapat mengaturnya ke nol untuk meniru efek gesekan statis . Sejak saat itu, gesekan dinamis persis seperti yang Anda gambarkan. +1
teodron
0

Dalam mesin bodi kaku "normal" Anda akan memodelkan gesekan sebagai impuls tegak lurus terhadap normal. Saya akan menebak bahwa dalam konteks ini yang berarti bukannya impuls mengatur posisi partikel yang terkena dampak dengan tepat. Dengan kendala di tempat ini seharusnya, jika saya memahami artikel dengan benar, maka iteratif mencapai keadaan di mana gesekan juga mempengaruhi rotasi. Saya menduga bahwa dengan "model yang lebih baik" penulis berarti cara yang lebih baik untuk menentukan jumlah gesekan daripada proyeksi linear interpenetrasi. Namun ini dugaan di pihak saya karena saya belum pernah menerapkan fisika dengan pendekatan ini sendiri.

EDIT:

Untuk menghitung ukuran gaya gesek Anda memiliki nilai offset pada gambar Anda. Saat Anda menggunakan verlet dengan stempel waktu tetap, kami tahu bahwa offset ini sebenarnya adalah kecepatan yang dimiliki kontak ke arah kontak normal (well, tidak persis, dan saya pikir inilah yang dimaksud penulis dengan membuat perkiraan gesekan yang lebih baik ). Mengetahui kecepatan sepanjang kontak normal sangat penting karena kita dapat menggunakannya untuk menentukan impuls. Cara terbaik adalah menerapkan gesekan dalam bentuk impuls di setiap bingkai di mana ada kontak. Ukuran gesekan pada sumbu paralel terhadap bidang kontak ditentukan oleh koefisien gesekan (ditentukan oleh bahan, misalnya 0,7 untuk gesekan yang agak tinggi). Gesekan maksimum yang bisa Anda miliki adalah koefisien gesekan dikalikan dengan offset. Perhatikan bahwa nilai ini bisa lebih besar dari kecepatan aktual di sepanjang salah satu sumbu. Dalam hal ini Anda memiliki gesekan statis dan partikel tidak boleh bergerak sama sekali dalam sumbu itu. Jika nilainya kurang dari itu partikel akan bergerak sedikit tetapi diperlambat, yaitu gesekan dinamis.

Mikael Högström
sumber
Anda benar. Bagian yang sulit, setidaknya bagi saya, adalah menentukan bagaimana "mengatur posisi partikel yang terkena dampak dengan tepat".
paldepind
Ahh ok, kalau begitu saya lihat di mana Anda berada. Saya punya ide untuk solusi, saya akan mengedit jawabannya
Mikael Högström
Itu persis teknik yang dijelaskan di koran;). Saya pikir saya akan mencoba menerapkannya dan melihat apakah itu cukup baik untuk proyek saya.
paldepind
Ahh saya kira begitu ... Sepertinya metode ini hampir sama seperti untuk mesin bodi yang kaku hanya memperhitungkan integrasi verlet dan menerapkan impuls sebagai perubahan posisi sebagai gantinya.
Mikael Högström