Saya perlu memoles trigonometri saya dan berharap Anda dapat membantu di sini dengan model matematika sederhana. Berikut adalah model saya sejauh ini pada gambar terlampir. Saya sadar bahwa frame animasi memiliki masalah lain ketika bola bergerak sangat cepat, tetapi untuk sekarang saya hanya perlu menghitung ballDx dan ballDy. Mungkin juga ballDx = 0 (hanya gerakan vertikal), tetapi ketika bola membelokkan ballDx mungkin mendapatkan nilai yang berbeda.
46
Jawaban:
Catatan: Semua yang berikut mengasumsikan permukaan bola tidak gesekan (sehingga tidak akan mulai berputar atau melambung karena berbeda).
Pada saat tabrakan, bola akan menyentuh sudut. Ketika benda padat bertabrakan, suatu gaya akan bertindak di sepanjang permukaan yang disebut normal, yaitu tegak lurus terhadap permukaan pada titik tumbukan.
Karena itu bola, tegak lurus ke permukaan mengarah ke pusat bola. Ok, jadi kita tahu arah gaya, bagaimana dengan besarnya? Dengan asumsi tabrakan elastis (dan bahwa persegi panjang tidak bisa bergerak), bola harus melambung pada kecepatan yang sama dengan yang ditimbulkannya.
Biarkan (nDx, nDy) menjadi kecepatan setelah tumbukan, (oDx, oDy) kecepatan sebelum tumbukan, dan (x, y) posisi bola pada titik tumbukan. Lebih jauh kita asumsikan sudut bola bertabrakan adalah pada (0,0).
Mengekspresikan wawasan kami sebagai formula, kami memiliki:
Yang setara dengan:
Mengganti dua persamaan pertama dalam yang terakhir, kita dapatkan:
Memperluas menggunakan thorem binomial
hasil:
Persamaan kuadrat ini untuk
c
memiliki dua solusi, salah satunya adalah 0. Jelas, itu bukan solusi yang kami minati, karena umumnya arah bola akan berubah sebagai hasil dari tabrakan. Untuk mendapatkan solusi lain, kami membagi kedua sisi dengan c dan mendapatkan:Itu adalah:
Untuk meringkas, kami memiliki:
Edit : Dalam kode:
Beberapa pertimbangan implementasi: Meskipun Anda dapat memperkirakan (x, y) dengan posisi bola setelah langkah simulasi, perkiraan ini akan mengubah sudut defleksi dan karenanya sangat terlihat, sehingga langkah simulasi Anda harus sangat halus (mungkin seperti itu sehingga bola tidak bergerak lebih dari 1/20 diamaternya per langkah). Untuk solusi yang lebih akurat, Anda dapat menghitung waktu tabrakan terjadi, dan membagi langkah simulasi pada waktu itu, yaitu melakukan langkah parsial hingga titik tabrakan, dan langkah parsial lain untuk sisa langkah.
Sunting 2: Menghitung titik dampak
Misalkan r adalah jari-jari, (x0, y0) posisi dan (dx, dy) kecepatan bola pada awal langkah simulasi. Untuk kesederhanaan, mari kita asumsikan bahwa sudut yang dimaksud terletak pada (0,0).
Kita tahu:
Kami ingin
Itu adalah
Itu adalah persamaan kuadrat dalam t. Jika diskriminatif
negatif, tidak memiliki solusi, yaitu bola tidak akan pernah menyentuh sudut pada jalannya yang sekarang. Jika tidak, dua solusi diberikan oleh
Kami tertarik pada saat tabrakan dimulai, yang merupakan waktu sebelumnya
t1
.Metode Anda akan menjadi:
sumber
At the moment of collision, the ball will be touching the corner
tetapi saya tidak melihat pembenaran dari perkiraan ini (dan itu harus perkiraan karena itu tidak benar - bola menyentuh di dua tempat, tidak ada yang merupakan sudut).Inilah cara visual dalam memandang suatu masalah.
Set masalah asli adalah lingkaran vs persegi panjang (abu-abu pada gambar di bawah). Ini sama dengan titik vs rected round (ditunjukkan dalam warna hitam).
Jadi ini adalah masalah multi-bagian. Anda sedang menguji tabrakan titik Anda dengan 4 garis (diekstrusi keluar dari tepi kotak oleh jari-jari lingkaran asli) dan 4 lingkaran (di sudut-sudut persegi panjang dengan jari-jari yang sama dengan lingkaran asli).
Dengan kecepatan kasar di gambar asli Anda, titik akan mengenai lingkaran sudut kanan bawah. Yang harus Anda lakukan adalah mencari tahu titik di lingkaran sudut yang akan Anda tekan, menghitung sudutnya, dan memantulkannya.
Saya akan meninggalkan derivasi itu sebagai latihan untuk pembaca.
sumber
Saya sedang mengerjakan permainan dan juga terjebak di sini. Tapi saya kira begini:
Ada pandangan lain Masalah saya adalah bahwa saya tidak tahu cara cepat menghitung dx baru, dy (bagi saya menggunakan matematika tradisional memerlukan terlalu banyak perhitungan).
sumber
Kinematika adalah semua tentang memilih yang benar, seperti yang paling nyaman untuk perhitungan, kerangka acuan.
Di sini kita pertama-tama akan mendefinisikan transformasi T yang menyelesaikan sumbu kita menjadi komponen paralel ( x ' ) dan tegak lurus ( y' ) menjadi garis antara pusat bola dan sudut. Transformasi terbalik T * akan mengembalikan sistem koordinat asli kami.
Dalam kerangka referensi baru ini, dengan refleksi (dan simetri waktu dan ruang fisika), kita memiliki transformasi kecepatan kontak M ( impuls titik ) seperti yang membalikkan komponen x ' dan membiarkan komponen y' tidak berubah . Dalam istilah matriks, ini adalah matriks diagonal dengan -1 dan 1 pada diagonal.
Maka kecepatan setelah tabrakan hanyalah: V ' = T * . M . T . Vo .
Saat dampak t adalah kemudian hanya solusi untuk ( T . Do ) + ( X . T . Vo () t ) = r di mana X adalah operator proyeksi sumbu X dan r adalah jari-jari bola. Ulang, kita memperoleh
t = ( r - ( T . Do )) / (( X . T . Vo ) ( t ))
Ini memiliki keuntungan berbeda dari mengubur semua matematika yang rumit di perpustakaan grafis standar yang ditulis, diuji, dan di-debug secara ketat. Solusi ini juga identik untuk situasi 2D dan 3D - cukup aktifkan pustaka grafis. Akhirnya, ini menyoroti bahwa seseorang harus terlebih dahulu berpikir tentang kerangka referensi yang sesuai sebelum menangani masalah fisika. Selalu ada godaan NIH, tetapi sebenarnya itu hanya resep untuk bug ketika lebih banyak solusi ringkas tersedia.
sumber