Anda di halaman 1dari 7

Fisika : Tumbukan Elastis

Melanjutkan artikel tentang Kecepatan dan Kelajuan, kali ini saya akan menjelaskan
pembuatan animasi tumbukan sebuah bola dengan dinding dengan memasukkan besaran
gravitasi, elastisitas, selain kecepatan dan percepatan.

Kalo Anda belum membaca artikel sebelumnya, silakan baca dulu. Kunci dari pembuatan
animasi yang realistis ( ingat ya, realistis belum tentu akurat ) adalah pengetahuan
tentang Vektor. Jadi kalo mau tahu sebih detil, silaken baca lagi buku-buku matematika
Anda.

Tumbukan & Energi Kinetik

Dalam tulisan ini, saya hanya membahas tumbukan antara sebuah bola dengan dinding
atau objek statis. Kalo Anda ingin tahu cara membuat animasi tumbukan antara 2 atau
lebih objek yang bergerak ( bola dengan bola ), sabar … tunggu tulisan yang akan datang
mengenai impuls dan momentum.

Dari apa yang saya baca di buku “Kartun Fisika”1, ada 3 jenis tumbukan, yaitu Elastis,
Semi-elastis, dan tidak elastis. Elastisitas tumbukan banyak dipengaruhi oleh besarnya
Energi Kinetik yang terkonversi menjadi panas pada saat bola menumbuk dinding. Dalam
ActionScript, Energi Kinetik sebuah benda yang bergerak dapat dihitung dengan:

EK = 0.5 * m * v * v

Untuk sementara, kita nggak memasukkan unsur massa bola ke dalam animasi kita, yang
akan kita “hilangkan” adalah sebagian dari v. Dan kita juga tidak perlu tahu berapa
tepatnya Energi Kinetik bola.

Yang kita ingin tahu adalah berapa besar perubahan kecepatan sebagai akibat hilangnya
Energi Kinetik. Sebagai contoh, bola yang kehilangan sebagian energi kinetiknya pada
saat menumbuk lantai kecepatan vertikalnya akan berubah dan dapat dihitung dengan
cara :

vy *= (1 – lostEK)

lostEK adalah banyaknya EK yg hilang, nilainya bisa bervariasi dari 0 – 1. Jika lostEK =
0, maka yg terjadi adalah tumbukan Elastis sempurna. Jika lostEK = 1, tumbukan tidak
elastis. Untuk nilai lostEK yg lain, tumbukan semi-elastis.

Rumus ini bukan rumus yg akurat namun hasilnya cukup realistis.


Dalam gambar di atas, pada saat terjadi tumbukan, sebagian EK bola hilang, karena
massa bola kita abaikan maka bisa kita anggap hilangnya EK sebagai hilangnya vy
( vektor hijau, lost EK ). Jika tidak ada EK yg hilang, vy sesaat setelah tumbukan
besarnya sama dengan vy sebelum tumbukan ( vektor vy0 ) hanya arahnya yg terbalik.
Namun jika ada EK yg hilang, vy berkurang ( vektor vy1 ). Jadi secara sederhana,

vy1 = – ( vy0 – lostVy )

Komponen X tidak ada yg berubah, kecuali jika kita menentukan sebuah besaran lain
yaitu “friksi” pada bidang yang ditumbuk oleh bola. Untuk sementara, kita anggap
bidang/dinding tidak mempunyai friksi.

Catatan – [1] Buku ini berjudul “Kartun Fisika”, terbitan Kepustakaan Populer
Gramedia, 2001. Saya beli di toko buku Togamas, Malang. Isinya bagus dan mudah
dipahami karena konsep-konsep fisika dijelaskan dengan gambar-gambar lucu. Kata
pengantar ditulis oleh Yohanes Surya, Ph.d, pembina Tim Olimpiade Fisika Indonesia.
99% materi tulisan saya di website ini juga berdasarkan apa yg ada di buku itu selain dari
sumber yg lain.

Vektor

Kembali ke vektor. Seperti yg kita tahu, kecepatan & percepatan adalah vektor dan untuk
melakukan operasi matematik terhadap sebuah vektor kita perlu tahu komponen-
komponennya. Tentu sesuai dengan sistem koordinat yang kita gunakan. Karena Flash
menggunakan sistem koordinat Kartesian, maka kita perlu tahu komponen X dan Y dari
vektor tersebut. Gambar A di bawah ini menunjukkan vektor kecepatan (v) dan
komponen-komponennya ( vx , vy ). Jika kita ingin menggunakan/menambahkan
percepatan, maka gambarnya kurang lebih seperti yg ditunjukkan dalam Gambar B.
Kita lihat Gambar B. Vektor vx dipengaruhi oleh komponen ax. Sedangkan vy
dipengaruhi oleh ay. Ingat bahwa percepatan adalah nilai perubahan kecepatan yang
terjadi setiap (satuan) waktu. Jadi kecepatan sesaat sebuah objek dapat dihitung dengan
menambahkan kecepatan inisialnya dengan percepatan. Dalam ActionScript dapat kita
gunakan rumus :

vx += ax
vy += ay

Dan besarnya kecepatan, kita hitung dengan menggunakan rumus Phytagoras, yaitu :

v = Math.sqrt(vx*vx + vy*vy);

Dengan arah sudut:

sudut = Math.atan2(vx,vy);

Ok, let’s get to work.

Deteksi tumbukan dan reaksi bola

Buat sebuah MovieClip berbentuk lingkaran, beri nama ball_mc. Ingat, registration
point MovieClip ini harus di tengah. Buat juga sebuah MovieClip berbentuk persegi
empat, beri stroke 1 px. Beri nama walls_mc. Buat layer baru, beri nama “script”, klik
frame 1, dan buka panel ActionScript (tekan F9).

Pertama, kita buat inisialisasi variabel ax, ay, vx, dan vy. Saya memberi nilai 0.1 untuk ax
dan ay. Sementara vy & vx saya beri nilai 0. Anda bisa memberi nilai berapa saja, tapi
sebaiknya gunakan nilai yg kecil supaya animasi tidak terlalu cepat.
Actionscript:

1. var ax:Number = .1;


2. var ay:Number = .1;
3. var vx:Number = 0;
4. var vy:Number = 0;

Kita juga perlu menentukan boundaries atau batas-batas pergerakan bola. Karena kita
ingin walls_mc berlaku seperti dinding, maka kita buat variabel dengan
memperhitungkan posisi relatif bola terhadap dinding dan jari-jari bola.

Actionscript:

1. var top:Number = walls_mc._y + ball_mc._height/2;


2. var bottom:Number = walls_mc._y + walls_mc._height-
ball_mc._height/2;
3. var left:Number = walls_mc._x + ball_mc._width/2;
4. var right:Number = walls_mc._width-ball_mc._width/2;

Variabel-variabel di atas akan kita gunakan untuk mengecek apakah terjadi tumbukan.
Kita ambil contoh, tumbukan dengan dinding sebelah kanan. Tumbukan terjadi jika
koordinat bola kurang dari atau sama dengan koordinat dinding dikurangi dengan jari-jari
bola.

Ada 4 skenario reaksi bola terhadap tumbukan dengan dinding :

1. tumbukan dengan dinding kiri, arah vx menjadi positif


2. tumbukan dengan dinding kanan, arah vx menjadi negatif
3. tumbukan dengan atap, arah vy menjadi positif
4. tumbukan dengan lantai, arah vy menjadi negatif

Untuk mengecek apakah terjadi tumbukan atau tidak sekaligus membuat reaksi bola jika
terjadi tumbukan, kita buat sebuah function tersendiri yaitu checkBoundaries() . Untuk
membalik arah vektor horisontal & vertikal, kita cukup mengalikannya dengan -1.

Actionscript:

1. function checkBoundaries() {
2. if (ball_mc._x > right) {
3. ball_mc._x = right;
4. vx *= -1;
5. }else if(ball_mc._x < left){
6. ball_mc._x = left;
7. vx *= -1;
8. }
9. if (ball_mc._y > bottom ) {
10. ball_mc._y = bottom;
11. vy *= -1;
12. }else if(ball_mc._y < top){
13. ball_mc._y = top;
14. vy *= -1;
15. }
16. };

Lihat gambar di bawah ini. Gambar A, terjadi tumbukan di mana ball_mc._x < right.
Sebelum kita membalik arah vx, kita perlu memposisikan ball_mc, lihat Gambar B. Jika
tidak kita posisikan seperti ini, maka bola bisa hilang dari Stage sesaat setelah tumbukan
dan muncul kembali setelah sepersekian detik. Tentu animasi akan jadi aneh.

Sekarang kita buat function untuk menjalankan animasi, seperti biasa, function ini saya
panggil dari setInterval() untuk menghasilkan animasi yg tidak tergantung pada FPS.
Function ini juga terus menerus mengeksekusi checkBoundaries().

Actionscript:

1. var intID:Number = setInterval("animate",60);


2. function animate() {
3. vx += ax;
4. ball_mc._x += vx;
5. vy += ay;
6. ball_mc._y += vy;
7. vx_txt.text = vx;
8. vy_txt.text = vy;
9. checkBoundaries();
10. }

Jalankan movie dan lihat hasilnya. Bola tidak akan pernah bergerak dalam garis lurus
karena efek ax dan ay. Coba Anda ubah nilai ax & ay. Lihat perbedaan yg terjadi. Coba
juga ubah nilai awal vx dan vy.

Berikut ini swf yg saya buat dengan skrip yg sama dengan di atas, ditambah sebuah
tombol utk play & pause. Nilai ax,ay, vx, dan vy dapat dilihat juga. Perhatikan bahwa
nilai vx & vy bertambah jika searah dengan ax & ay, berkurang jika berlawanan arah
dengan ax & ay. Jika menumbuk dinding, nilainya akan berubah tanda dari positif ke
negatif atau sebaliknya.

Silakan donlod sourcenya di sini.

Gravitasi & Tumbukan tidak elastis

Sekarang kita coba masukkan gravitasi dan kita buat bola kehilangan sebagian energi
kinetiknya pada saat terjadi tumbukan ( tumbukan tidak elastis ). Untuk itu kita buat 2
buah variabel baru yaitu gravity dan lostEK.

var lostEK:Number = .3;


var gravity:Number = .1;

Gravitasi searah dengan sumbu Y, jadi seperti halnya ay, gravity akan mengubah nilai vy.

vy += gravity;
vy += ay;

lostEK, seperti yg saya jelaskan di awal artikel ini, adalah besar EK bola yang berubah
menjadi panas pada saat terjadi tumbukan. Dalam hal ini, tumbukan dengan lantai.
Karena kita mengabaikan massa bola, maka hilangnya EK bisa dianggap sebagai vektor
yang berlawanan arah dengan vy. Besar vektor ini dari 0 – 1. Vektor ini kita masukkan
pada function checkBoundaries() sehingga function ini sekarang menjadi :

Actionscript:

1. function checkBoundaries() {
2. if (ball_mc._x > right) {
3. ball_mc._x=right;
4. vx*=-1;
5. }else if(ball_mc._x < left){
6. ball_mc._x=left;
7. vx*=-1;
8. }
9. if (ball_mc._y > bottom ) {
10. ball_mc._y = bottom;
11. if(vy>lostEK) {
12. // vy setelah tumbukan
13. vy *= - (1-lostEK);
14. }else{
15. vy=0;
16. }
17. }else if(ball_mc._y < top){
18. ball_mc._y = top;
19. vy *= -1;
20. }
21. };

Jalankan Movie dan lihat hasilnya. Coba ubah nilai gravity & lostEK. Semakin besar
lostEK, makin rendah pantulan bola bahkan bisa jadi tidak memantul sama sekali.

Selanjutnya …

Rumus/kode di atas bisa Anda gunakan untuk membuat animasi yang ciamik dengan
memanfaatkan rumus Fisika sederhana. Tentu dengan sedikit improvisasi.

Berikut ini animasi yg saya buat dengan rumus-rumus diatas plus sedikit tambahan untuk
input dan output dinamis. Silakan coba ubah nilai gravitasi & lost EK, menggunakan
numeric stepper. Anda juga bisa mengubah nilai ax & ay dgn menggunakan tombol a, s,
w, & d. Kalau animasi berjalan terlalu cepat, klik tombol “reset”.

Bola akan mulai bergerak jika minimal salah satu dari ay, ax, atau gravitasi bernilai lebih
besar dari 0.

Mungkin bisa dipake untuk belajar Fisika … hehe

Bola warna-warni! Klik bola untuk melontarkannya dengan vy & vx acak. Klik Reset
untuk mengembalikan ke posisi semula.

Anda mungkin juga menyukai