Rekurencja

w opracowaniu klasy E '91

Animacja canvas w Java Script

Jakub Kozioł

Rezultat

schowaj/pokaż
Jeżeli widzisz ten tekst to znaczy, że używasz przeglądarki, która nie obsługuje najnowszych standardów, wykorzystywanych w tym przykładzie. Aby móc go zobaczyć pobierz Google Chrome, lub najnowsze wydanie Firefox.

W tej części posłużę się językiem Java Script oraz elementem <canvas>, który jest częścią powstającej specyfikacji HTML 5. Znacznik canvas ma służyć celom animacyjnym za pomocą Java Script, co przy okazji zaprezentuję.

Program ten ma posłużyć jako przykład użycia rekurencji w animacji. Założeniem jest generowanie w losowych miejscach, kół o losowych parametrach. Koła te mają pojawiać się jako niewielkie kropki, po czym powiękrzyć się i pod koniec zaniknąć.

Składowymi programu są dwie główne funkcje: draw() oraz circle(). Funkcja draw() jest odpowiedzialna za wywołanie funkcji circle() z losowymi parametrami z odpowiedniego zakresu. Zaś funkcja circle() bezpośrednio rysuje na zadanym obszarze okrąg o zadanych parametrach.

function draw()
{
  var x=Math.floor(Math.random()*200)+50;
  var y=Math.floor(Math.random()*200)+50;
  var r=Math.floor(Math.random()*256);
  var g=Math.floor(Math.random()*256);
  var b=Math.floor(Math.random()*256);
  circle(x,y,r,g,b,1);
  draw();
}
 
function circle(x,y,r,g,b,i)
{
  var alpha;
  var p;
  var radius=(Math.log(3000)/Math.log(i+14)*(-10)+30)*m;
  if(i>97) alpha=0;
  else
  {
    p=100-i;
    alpha=Math.log(p)/Math.log(20)-0.65;
  }
  
  ctx.beginPath();
  ctx.arc(x,y,radius,-Math.PI,Math.PI,true);
  ctx.fillStyle='rgba('+r+','+g+','+b+','+alpha+')';
  ctx.fill();
  i++;
  if(i<99) circle(x,y,r,g,b,i);
}

Jak widać w kodzie obydwie funkcje na koniec działania wywołują się ponownie, z czego draw() bezwarunkowo a circle() tylko określoną ilość razy.

Takie użycie obydwu funkcji pozwala na wielokrotne uruchomienie funkcji rysującej koła, która po pierwszym uruchomieniu staje się autonomiczna i przekazuje potrzebne sobie informacje w parametrach przetwarzanych w jej wnętrzu.

Parametry funkcji circle to: