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:
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
- Wikipedia. 2019. Barnsley fern. https://en.wikipedia.org/wiki/Barnsley_fern. Diakses tanggal 15 September 2019.
- Rosettacode. 2019. Barnsley fern. https://rosettacode.org/wiki/Barnsley_fern. Diakses tanggal 15 September 2019.
Komentar
Posting Komentar