线性插值 C实现

#include "stdafx.h"
#include "math.h"
struct Hist
{
	int iData[500];
	int iLength;
};

struct Hist stHistSrc;
struct Hist stHistDst;


	
void HistInterpolation(struct Hist& stHistSrc,struct Hist& stHistDst, int iSrcLength, int iDstLength)
{
	double k;
	double b;
	double step = 1.0 * iDstLength / iSrcLength;
	int i;
	int j;
	int idx;
	for(i = 0; i < iSrcLength; i++)
	{
		if (i == 0)
		{
			k = stHistSrc.iData[0] / step;
			b = 0;
		}
		else
		{
			k = (stHistSrc.iData[i] - stHistSrc.iData[i-1])/ step;
			b = stHistSrc.iData[i] - k * (i+1) * step;
		}
	
		//线性插值
		for (j = ceil(i*step); j < ceil((i+1)*step); j++)
		{
			idx = j;
			stHistDst.iData[idx] = k * idx + b;
		}
		
	}

	stHistDst.iLength = iDstLength;


}
int _tmain(int argc, _TCHAR* argv[])
{
	for (int i = 0; i < 100; i++)
		stHistSrc.iData[i] = i;

	

	HistInterpolation(stHistSrc,stHistDst, 30, 100);
	return 0;
}

你可能感兴趣的:(线性插值)