MEMBUAT ANIMASI TUMBUKAN LENTING SEMPURNA PARTIKEL GAS (TEORI KINETIK GAS)

Pada tutorial kali ini, akan saya jelaskan secara singkat bagaimana cara membuat animasi tumbukan lenting sempurna partikel yang berjumlah banyak dengan asumsi partikel mengalami tumbukan lenting sempurna. Teori tumbukan lenting sempurna ini mendukung teori kinetik gas yaitu keadaan partikel dalam gas yang diasumsikan mengalami tumbukan lenting sempurna. pada tutorial kali ini saya menggunakan AS 2.0. 



Langkah 1 
Buka sebuah file baru berukuran 500 x 400, Selanjutnya berilah warna pada backgroundnya dengan warna cerah. 

Langkah 2 
Buatlah sebuah movie clip kosong, caranya dari stage yang masih kosong, tekan tombol Ctrl + F8, pilih movieclip dan beri nama “kosong”, sekarang lihat ke library, klik kanan mc kosong dan pilih linkage, kemudian isikan “kosong” pada identifier. 

Langkah 3 
Buatlah sebuah bola berwarna gelap berukuran 20 x 20 (lihat property, height = 20, width = 20), kemudian convert bola ini ke dalam movie clip dan beri nama “partikel”, hapus mc partikel dan lihat ke library, klik kanan mc partikel, pilih linkage, pada identifier ketikkan “partikel”. 

Langkah 4 
kembali ke stage utama, klik frame 1 layer 1, tekan tombol F9 dan masukkan Action script berikut: 

stop();
t = 0;
dx = 0;
//Membuat variabel
_root.attachMovie(“kosong”, “kosong”, _root.getNextHighestDepth(), {_x:1500, _y:200});
_root.createEmptyMovieClip(“container_movie”, _root.getNextHighestDepth());
//memasukkan movieclip
kosong.onEnterFrame = function() {
//ini adalah fungsi yang mengeksekusi setiap frame
if (Math.random()*1000<100 and t<50) {
//kondisi yang akan menambah jumlah partikel setiap interval bilangan random (50)
circle = container_movie.attachMovie(“partikel”, “partikel”+t, container_movie.getNextHighestDepth(), {_width:a, _height:b, _x:(20+Math.random()*300), _y:(20+Math.random()*300), _rotation:Math.random()*300});
t++;
circle.xspeed = Math.random()*9;
circle.yspeed = Math.random()*9;
//Menentukan kecepatan acak partikel pada sumbu x dan y
circle.onEnterFrame = function() {
this._x -= this.xspeed;
this._y -= this.yspeed;
//Fungsi yang menggerakkan partikel
if (this._x<10) {
this._x = 10;
this.xspeed = -this.xspeed;
}
if (this._x>490) {
this._x = 490;
this.xspeed = -this.xspeed;
}
if (this._y<10) {
this._y = 10;
this.yspeed = -this.yspeed;
}
if (this._y>390) {
this._y = 390;
this.yspeed = -this.yspeed;
}
//Memastikan bahwa partikel tidak akan keluar dari batas 
};
}
//Memeriksa tumbukan setiap partikel
for (i=0; i a = _root.container_movie[“partikel”+i];
for (j=i+1; j b = _root.container_movie[“partikel”+j];
var dx = b._x-a._x;
var dy = b._y-a._y;
var dist = Math.sqrt(dx*dx+dy*dy);
//Memeriksa jarak antara 2 partikel
if (dist<20) {
_root.solveBalls(a, b);
//karena radius setiap partikel adalah 10 (diameter 20), maka jarak tumbukan antara partikel terhitung 20 pixel.
} else {
}
}
}
};

function solveBalls(ballA, ballB) {
var x1 = ballA._x;
var y1 = ballA._y;
var dx = ballB._x-x1;
var dy = ballB._y-y1;
var dist = Math.sqrt(dx*dx+dy*dy);
radius = 10;
//fungsi ini akan menghitung jarak tumbukan partikel
normalX = dx/dist;
normalY = dy/dist;
midpointX = (x1+ballB._x)/2;
midpointY = (y1+ballB._y)/2;
//fungsi ini yang akan menentukan titik normal dan titik pusat
ballA._x = midpointX-normalX*radius;
ballA._y = midpointY-normalY*radius;
ballB._x = midpointX+normalX*radius;
ballB._y = midpointY+normalY*radius;
//fungsi ini yang akan membalik 2 buah partikel ke posisi yang berbeda sehingga tidak sempat menyatu 
dVector = (ballA.xspeed-ballB.xspeed)*normalX+(ballA.yspeed-ballB.yspeed)*normalY;
dvx = dVector*normalX;
dvy = dVector*normalY;
//fungsi ini menentukan kecepatan baru partikel setelah bertumbukan
ballA.xspeed -= dvx;
ballA.yspeed -= dvy;
ballB.xspeed += dvx;
ballB.yspeed += dvy;

Kemudia test movie…

Leave a comment