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

Genetics Algorithm Method with Progressive Error Prediction

Apps Script untuk Cetak Sertifikat

Menampilkan Undetermined Circle Progressbar di Java

Kode Java Membandingkan Dua File

Menghapus Baris di Google Sheets yang Memiliki Sel Kosong dengan Apps Script

Jasa Penjadwalan Semester, UTS dan UAS Perguruan Tinggi menggunakan Google Sheet

Peringatan: Aksi Penipuan Skimming Melalui Aplikasi Android M-Pajak

Menambahkan Random Key sebagai ID Pembeda di Google Sheet dengan Apps Script

Tutorial Upload File ke Google Drive dari Website

Checking Data yang Belum Dimasukkan dalam Daftar Menggunakan Query Google Sheet