Membuat Kalkulator Interpolasi Bilinear dengan Javascript

Dalam perhitungan numerik yang seringkali penulis lakukan, untuk keperluan interpolasi, penulis banyak kali menggunakan metode Interpolasi Biliner.

Selain karena mudah dalam penggunaannya, untuk keperluan presisi, dapat dengan mengorientasikan ukuran panjang sisi grid yang kecil.

Persamaan matematis Interpolasi Bilinear yang penulis implementasikan adalah sebagai berikut:


Sedangkan dalam kode Javascript, untuk mempermudah perhitungan, penulis menggunakan dua kali langkah, yaitu menghitung arah horizontal dulu sebagai nilai c1 dan c2, baru menghitungnya sebagai nilai B.


Langkah-langkah di atas, dapat dilihat pada video Youtube penulis di bawah ini:


Sedangkan secara online kalkulator dapat dicoba dengan mengklik button dibawah ini:


Untuk kode Javascript dalam halaman HTML-nya adalah sebagai berikut:

<html> 
<head> 
<title>Bilinear Interpolation Example</title> 
</head> 
<body> 
 
<h1>Bilinear Interpolation Calculator</h1> 
Coordinat position:<br/> 
x<sub>1</sub>=<input type="text" value="100" id="posx1" size="3"/><br/> 
y<sub>1</sub>=<input type="text" value="100" id="posy1" size="3"/><br/> 
x<sub>2</sub>=<input type="text" value="300" id="posx2" size="3"/><br/> 
y<sub>2</sub>=<input type="text" value="200" id="posy2" size="3"/><br/> 
<hr/> 
A<sub>0</sub>(x<sub>1</sub>,y<sub>1</sub>)=<input type="text" value="30" id="A0"/><br/> 
A<sub>1</sub>(x<sub>2</sub>,y<sub>1</sub>)=<input type="text" value="46" id="A1"/><br/> 
A<sub>2</sub>(x<sub>1</sub>,y<sub>2</sub>)=<input type="text" value="27" id="A2"/><br/> 
A<sub>3</sub>(x<sub>2</sub>,y<sub>2</sub>)=<input type="text" value="58" id="A3"/><br/> 
<hr/> 
B(<input type="text" value="125" id="posbx" size="3"/>,<input type="text" value="115" id="posby" size="3"/>)=<span id="result"></span><br/> 
<input type="submit" value="calculate" onclick="calculate()"/> 
<hr/> 
<canvas id="myCanvas" width="800" height="500"/> 
 
<script> 
var canvas=document.getElementById("myCanvas"); 
var ctx=canvas.getContext("2d"); 
ctx.font="20px Arial"; 
 
function calculate() 
{ 
 ctx.fillStyle="white"; 
 ctx.fillRect(0,0,canvas.width,canvas.height); 

 var x1=parseFloat(document.getElementById("posx1").value); 
 var x2=parseFloat(document.getElementById("posx2").value); 
 var y1=parseFloat(document.getElementById("posy1").value); 
 var y2=parseFloat(document.getElementById("posy2").value); 

 var A0=parseFloat(document.getElementById("A0").value); 
 var A1=parseFloat(document.getElementById("A1").value); 
 var A2=parseFloat(document.getElementById("A2").value); 
 var A3=parseFloat(document.getElementById("A3").value); 

 var bx=parseFloat(document.getElementById("posbx").value); 
 var by=parseFloat(document.getElementById("posby").value); 

 var radius=10; 

 ctx.fillStyle="black"; 
 ctx.fillText("A0",x1-10,y1-20); 
 ctx.beginPath(); 
 ctx.arc(x1,y1,radius,0,2*Math.PI,false); 
 ctx.fill(); 
 ctx.closePath(); 

 ctx.fillText("A1",x2-10,y1-20); 
 ctx.beginPath(); 
 ctx.arc(x2,y1,radius,0,2*Math.PI,false); 
 ctx.fill(); 
 ctx.closePath(); 

 ctx.fillText("A2",x1-10,y2+40); 
 ctx.beginPath(); 
 ctx.arc(x1,y2,radius,0,2*Math.PI,false); 
 ctx.fill(); 
 ctx.closePath(); 

 ctx.fillText("A3",x2-10,y2+40); 
 ctx.beginPath(); 
 ctx.arc(x2,y2,radius,0,2*Math.PI,false); 
 ctx.fill(); 
 ctx.closePath(); 

 ctx.beginPath(); 
 ctx.strokeStyle="black"; 
 ctx.moveTo(x1,y1); 
 ctx.lineTo(x2,y1); 
 ctx.lineTo(x2,y2); 
 ctx.lineTo(x1,y2); 
 ctx.lineTo(x1,y1); 
 ctx.stroke(); 
 ctx.closePath(); 

 ctx.fillStyle="red"; 
 ctx.fillText("B",bx-10,by-10); 
 ctx.beginPath(); 
 ctx.arc(bx,by,radius,0,2*Math.PI,false); 
 ctx.fill(); 
 ctx.closePath(); 

 if(bx>=x1 && by>=y1 && bx<=x2 && by<=y2){ 
  var c1=((bx-x1)*A1+(x2-bx)*A0)/(x2-x1); 
  var c2=((bx-x1)*A3+(x2-bx)*A2)/(x2-x1); 
  var b=((by-y1)*c2+(y2-by)*c1)/(y2-y1); 
  document.getElementById("result").innerHTML=b; 
 }else alert("B must be inside A!"); 
} 
</script> 
</body> 
</html> 

Komentar



Postingan populer dari blog ini

Apakah Kuliah untuk Bekerja

Menyikapi Ucapan AI Pejabat

Kaidah Baku untuk Konsistensi Data (PT, Tbk, Pty., & Ltd.)

Game TicTacToe dengan Greenfoot

Eliminasi Gauss-Jordan untuk Invers Matrix dengan Java

Kebodohan Karyawan Menyalahkan Sistem

Genetics Algorithm Method with Progressive Error Prediction

Algorithma Java Mencari KPK dan FPB

Ketika Pengelola Basis Data Terabaikan

Tidak ada Salahnya Belajar Bahasa Pemrograman