Saturday, June 20, 2009

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...

No comments:

Post a Comment

Comments system

Disqus Shortname

Disqus Shortname

Comments System

Disqus Shortname

Comments system