U E D R , A S I H C RSS

최다인/BilinearInterpolation (rev. 1.1)

최다인/Bilinear Interpolation


#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;
}
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
Processing time 0.0323 sec