Implementasi Barnsley Fern dengan HTML5 Canvas


Dalam fractal, Barnsley Fern dikenal sebagai salah satu fractal yang dibuat dengan Iterated Function System (IFS).

Dalam Wikipedia (2019) disebutkan untuk membentuk Barnsley Fern seperti gambar diatas diperlukan 4 parameter berikut:


dengan fungsi rekursif IFS-nya adalah:


Persamaan di atas, menunjukkan nilai x dan y, yang digunakan sebagai penentu posisi pixel yang diperbaharui setiap kali perulangan.

Di mana variable p digunakan sebagai syarat kondisi pembagian random IFS-nya.

Misalkan dengan nilai batas random 100, ilustrasi penggunaan nilai p dan sesuai kode dibawah adalah seperti gambar berikut:


Jika nilai random didapat nilai 2, yang artinya berada pada range 2/100=0.02, maka fungsi rekursif yang digunakan adalah fungsi f3, jika nilai random sama dengan 53, yang artinya pada range 53/100=0.53, maka fungsi rekursif yang digunakan f2, jika nilai random didapat 12, dengan range pada 12/100=0.12, maka fungsi rekursifnya adalah f4, dan seterusnya.

Berikut ini adalah kode HTML5 Canvas untuk implementasi Barnsley Fern di atas.
<html> 
<head> 
<title>HTML5 Canvas Code of Barnsley Fern</title> 
</head> 
<body> 
<canvas id="myCanvas" width="1024" height="768"> 
</canvas> 
<script> 
 
var canvas = document.getElementById("myCanvas"); 
var ctx = canvas.getContext("2d"); 
 
ctx.fillStyle = "#01579b"; 
ctx.fillRect(0, 0, canvas.width, canvas.height); 
 
ctx.translate(0.5*canvas.width,canvas.height); 
 
var f1=[0,0,0,0.16,0,0,0.01]; 
var f2=[0.85,0.04,-0.04,0.85,0,1.60,0.85]; 
var f3=[0.20,-0.26,0.23,0.22,0,1.60,0.07]; 
var f4=[-0.15,0.28,0.26,0.24,0,0.44,0.07]; 
 
var x=0,y=0,xo=0,yo=0; 
 
ctx.fillStyle = "#ffc107"; 
function Menggambar() 
{ 
 for(i=0;i<25;i++){ 
  var bts=100; 
  var r=bts*Math.random(); 
  var a=60; 
  if(r<f1[6]*bts){ 
   x=f1[0]*xo+f1[1]*yo+f1[4]; 
   y=f1[2]*xo+f1[3]*yo+f1[5]; 
  }else if(r>=f1[6]*bts && r<(f1[6]+f2[6])*bts){ 
   x=f2[0]*xo+f2[1]*yo+f2[4]; 
   y=f2[2]*xo+f2[3]*yo+f2[5]; 
  }else if(r>=(f1[6]+f2[6])*bts && r<(f1[6]+f2[6]+f3[6])*bts){ 
   x=f3[0]*xo+f3[1]*yo+f3[4]; 
   y=f3[2]*xo+f3[3]*yo+f3[5]; 
  }else{ 
   x=f4[0]*xo+f4[1]*yo+f4[4]; 
   y=f4[2]*xo+f4[3]*yo+f4[5]; 
  } 
  ctx.fillRect(x*a,-y*a,1,1); 
  xo=x;yo=y; 
 } 
 window.requestAnimationFrame(Menggambar); 
} 
 
Menggambar(); 
</script> 
</body> 
</html> 

Referensi

Komentar



Postingan populer dari blog ini

Kumpulan Source Code Greenfoot

Algorithma Coretan Abstrak dengan HTML5 Canvas

Game TicTacToe dengan Greenfoot

Honeycomb Style Wallpaper dengan HTML5 Canvas

Cara Membuat Halaman HTML Sederhana

Kode Greenfoot Game Snake Sederhana

Melihat Alamat Berbentuk QR Code di Undangan Pernikahan

Algoritma Tombol Putar dengan Greenfoot

Tips Agar Website Anda Segera di Terima oleh Google Adsense dan di-Monetize

Selamatan Latar Glundengan Bubuk Banyuwangi