Fisika: Kecepatan, Kelajuan, & Hukum Newton Kedua

Menerapkan rumus-rumus Fisika dalam aplikasi Flash nggak susah – walaupun nggak gampang juga. Kuncinya adalah tahu dasar-dasar matematika Vektor (dan Trigonometri tentunya) dan sedikit improvisasi dalam penerapan rumus Fisika. Dalam tutorial ini, saya akan menjelaskan beberapa contoh penerapan rumus-rumus fisika dengan ActionScript 2.0 .

Kalo Anda belum mengerti Trigonometri dan Matematika Vektor, saya sarankan agar mencari tutorial di Internet atau mungkin buku-buku SMU. Kedua topik tersebut menjadi dasar tutorial ini.

Kelajuan (speed)

Sekilas Kecepatan dan Kelajuan adalah hal yang sama. Secara teknis nggak begitu. Kelajuan adalah besaran skalar sedangkan Kecepatan adalah besaran vektor. Kelajuan nggak mempunyai arah, sedangkan kecepatan punya.

Rumus dasar kelajuan adalah :

v = d/t
d : jarak
t : waktu

Kecepatan (velocity)

Kecepatan adalah kelajuan suatu benda yang bergerak ke arah tertentu. Rumusnya sama dengan kelajuan, hanya saja ada komponen vektor (arah) di situ.

Gimana implementasinya dalam ActionScript? Gampang. Komponen d adalah jarak dalam satuan pixel dan komponen t adalah waktu atau frame . Misalnya gini, suatu MovieClip berpindah tempat sejauh 30 px dalam 10 frame. Maka dapat dikatakan bahwa kecepatannya adalah 3 px/frame. Karena menggunakan frame, seberapa cepat pergerakan MovieClip tersebut sangat ditentukan oleh nilai fps Flash movie. Makin tinggi fps semakin cepat MovieClip bergerak.

Contoh berikut ini menunjukkan sebuah MovieClip yang bergerak searah sumbu X dengan kecepatan 3 px/frame;

Actionscript:
  1. _root.onEnterFrame = function(){
  2. myMC._x += 3;
  3. }

Untuk mendapatkan kecepatan dengan satuan waktu (detik), kita bisa menggunakan fungsi setInterval(). Kita ambil contoh di atas untuk membuat MyMC bergerak dengan kecepatan 3 px per 30 milidetik searah sumbu X.

Actionscript:
  1. var intID = setInterval(moveMe,30);
  2. function moveMe(){
  3. myMC._x += 3;
  4. }

Catatan – Penggunaan function setInterval() membuat kecepatan myMC nggak tergantung fps. Berapapun fps yang digunakan, kecepatannya tetap 3px/ frame 30ms. Saya sendiri lebih suka menggunakan setInterval() daripada onEnterFrame karena lebih lebih ringan untuk CPU dan itu yang saya gunakan dalam tutorial ini. Untuk mendapatkan animasi yang kurang lebih sama dengan fps= 31, saya gunakan setInterval( … , 30). Jadi, saya harap Anda nggak bingung karena dalam teks saya tulis kecepatan xx/frame sedangkan di dalam contoh saya gunakan setInterval bukan onEnterFrame.

Terkadang dalam membuat sebuah scripted animation Anda hanya punya sudut dan kecepatan, tanpa mengetahui berapa kecepatan di sumbu X & sumbu Y. Untuk mengetahui kecepatan linear sebuah objek yang bergerak dalam sudut tertentu, Anda dapat menggunakan rumus berikut:

vx = Math.cos(sudut) * kecepatan
vy = Math.sin(sudut) * kecepatan

Ingat bahwa fungsi trigonometri dalam Flash membutuhkan nilai dalam satuan Radian.Jadi Anda perlu mengkonversi sudut ke dalam Radian.

Sebagai contoh, kita ingin membuat sebuah movieClip yang bergerak dalam kecepatan 3px/frame dalam sudut 45 derajat. Pertama kita harus tahu berapa sudut tersebut dalam Radian. Kemudian baru kita bisa menggerakkan MovieClip dengan mengeset properti _x dan _y .

Actionscript:
  1. var angle:Number = 45;
  2. var speed:Number = 3;
  3. var intID = setInterval(moveMe,30);
  4. function moveMe(){
  5. var rad:Number = angle*Math.PI/180;
  6. var vx:Number = Math.cos(rad) * speed;
  7. var vy:Number = Math.sin(rad) * speed;
  8. myMC._x += vx;
  9. myMC._y += vy;
  10. }

Percepatan (acceleration)

Seperti halnya kecepatan, percepatan adalah vektor. Bedanya adalah kelajuan mengubah posisi sebuah objek, percepatan mengubah kecepatannya. Sederhananya, percepatan adalah nilai yang ditambahkan ke kecepatan.

Sebagai contoh, dalam snippet di bawah ini, myMC bergerak dalam kecepatan 3px/frame dengan percepatan 0.1. Artinya, dalam setiap frame, kecepatannya bertambah 0.1px/frame .

Actionscript:
  1. var vx:Number = 3;
  2. var ax:Number = 0.1;
  3. var intID = setInterval(moveMe,30);
  4. function moveMe(){
  5. vx += ax;
  6. myMC._x += vx;
  7. }

Catatan – Percepatan nggak selalu bernilai positif, bisa saja negatif. Percepatan yang bernilai negatif disebut perlambatan (deceleration).

Hukum Newton II

Percepatan sebuah objek berbanding terbalik dengan massa dan berbanding lurus dengan gaya eksternal

F = m * a
F = force (gaya)
m = massa
a = percepatan

Sebagai contoh penerapannya dalam ActionScript kita buat sebuah movieclip bernama balon_mc yang menerima gaya dorong (ke atas) dan gaya tarik (ke bawah). Jika gaya dorong lebih besar dari gaya tarik, maka balon bergerak ke atas.

Actionscript:
  1. var gayadorong:Number = 3 ;
  2. var gayatarik:Number = -2;
  3. var massa:Number = 10;
  4. var ay:Number = (gayadorong + gayatarik)/10;
  5. var vy:Number = 0;
  6. var intID = setInterval(moveMe,30);
  7. function moveMe(){
  8. vy += ay;
  9. balon_mc._y += vy;
  10. }

Gravitasi

Gaya tarik gravitasi antara 2 objek dapat dihitung dengan rumus:

F = G * m1 * m2 / r^2
F = gaya tarik
G = konstanta gravitasi
m1 = massa objek 1
m2 = massa objek 2
r = jarak antara objek 1 dan 2

Dalam membuat aplikasi Flash, kadang kita perlu menyederhanakan rumus-rumus fisika. Rumus gravitasi di atas adalah salah satu diantara rumus-rumus yang perlu disederhanakan.

Kita nggak perlu menggunakan konstanta gravitasi beneran. Kita anggap saja nilainya adalah 1. Jadi rumus gravitasi dalam Flash adalah

F = m1 * m2 / r^2

Contoh penerapannya ada dalam Flash demo berjudul “Particle Attractor” yang saya buat beberapa waktu yg lalu dan bisa Anda lihat di sini

Friksi

Sederhananya, friksi adalah besaran yang berlawanan arah dengan kecepatan. Friksi mengakibatkan kecepatan sebuah objek berkurang. Rumusnya adalah:

F = u * m * g

F = friksi
u = konstanta friksi
m = massa
g = percepatan gravitasi

Dengan melakukan substitusi sisi kiri persamaan dengan rumus Hukum Newton Kedua kita dapatkan:

m * a = u * m * g
a = u * g

Implementasi Friksi dengan ActionScript dapat Anda lakukan dengan 2 langkah dasar yaitu :

  1. Hitung akselerasi berdasarkan konstanta u dan g (yang Anda tentukan sendiri)
  2. Jumlahkan akselerasi dengan kelajuan objek

Contohnya sebagai berikut:

Actionscript:
  1. var vx:Number = 10;
  2. var g:Number = 2;
  3. var u:Number = 0.2;
  4. a = u*g;
  5. var intID:Number = setInterval(moveMe, 30);
  6. function moveMe() {
  7. if (vx>0) {
  8. vx -= a;
  9. } else {
  10. vx = 0;
  11. }
  12. ball_mc._x += vx;
  13. }

Cara di atas dapat disederhanakan lagi (dan ini cara yang paling gampang) yaitu dengan mengalikan kecepatan dengan sebuah konstanta yang nilainya antara 0 dan 1. Contoh di atas dapat kita ubah menjadi :

Actionscript:
  1. var vx:Number = 10;
  2. var k:Number = 0.85;
  3. var intID:Number = setInterval(moveMe, 30);
  4. function moveMe() {
  5. vx *= k;
  6. ball_mc._x += vx;
  7. }

Jika k bernilai 1, maka kecepatannya tetap. Jika 0, objek berhenti.

Akhirnya …

Seperti yang Anda lihat, penerapan hukum-hukum Fisika untuk menghasilkan animasi yang realistis relatif gampang. Hanya perlu sedikit pengetahuan matematika dan logika serta improvisasi. Ingat, untuk mendapatkan hasil yang kita inginkan, tidak selamanya kita harus benar-benar mengikuti rumus Fisika yang ada. Seringkali diperlukan penyederhanaan, bahkan pengabaian beberapa variabel. Tentu saja ini akan membuat animasi sistem tidak akurat secara Fisika, tapi siapa peduli? Yang penting animasi kita cukup akurat secara visual.

Ok, sekian tutorial ini. Semoga bermanfaat. Amin.

Comments

Popular posts from this blog

Makalah pembiayaan pendidikan

contoh soal persamaan gelombang

Fungsi Gelombang dan Probabilitas