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

Apps Script untuk Cetak Sertifikat

Kumpulan Source Code Greenfoot

Menyembunyikan Failed Load Images di Blogger

Kode Greenfoot Game Flappy Bird

Algorithma Bilangan Prima dengan Javascript

Checking Data yang Belum Dimasukkan dalam Daftar Menggunakan Query Google Sheet

Kebodohan Karyawan Menyalahkan Sistem

Algorithma Coretan Abstrak dengan HTML5 Canvas

Mencoba Submit Theme di Wordpress.org

Generate Karakter Acak dan Menempatkannya di Sel Google Sheets dengan Apps Script