#include <stdio.h>
#include <stdlib.h>
#pragma warning(disable:4996)
int computePosition(float, float);
float bilinearInterpolation(float*, float, float, int);
int main()
{
float xValue, yValue, a, b;
float pointValue[25];
int i, position;
printf("two float values x and y (ex: 0.5 1.0) : ");
scanf("%f %f",&xValue,&yValue);
printf("25 float values for the values at 25 grid points (ex: 1.0 3.5 ...)\n: ");
for(i = 0; i < 25; i++)
scanf("%f",&pointValue[i]);
position = computePosition(xValue, yValue);
a = xValue - (int)xValue;
b = yValue - (int)yValue;
printf("The Value at the coordinate (x,y) is %.3f\n",bilinearInterpolation(pointValue, a, b, position));
system("pause");
return 0;
}
int computePosition(float xValue, float yValue)
{
int xposition = (int)xValue + 5*(int)yValue;
if(xposition%5 == 4)
xposition--;
if(xposition>=20)
xposition-=5;
return xposition;
}
float bilinearInterpolation(float pointValue[25],float a, float b, int position)
{
float f12, f34;
f12 = a*pointValue[position+1] + (1-a)*pointValue[position];
f34 = a*pointValue[position+6] + (1-a)*pointValue[position+5];
return b*f34 + (1-b)*f12;
}