1
0
Fork 0
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

101 lines
2.0 KiB

#include"interpolation.h"
#include "math.h"
#include <stdlib.h>
void interpolation(const float *x, const float *y, int Num, float x0, float*y0)
{
int i, index;
float k;
if (x0 <= x[0])
{
k = y[0];
}
else if (x0 >= x[Num - 1])
{
k = y[Num - 1];
}
else
{
for (i = 0; i < Num; i++)
{
if (x0 < x[i])
break;
}
index = i - 1;
if ((float)x[index + 1] - (float)x[index] < 0.001)
k = (float)y[index];
else
k = ((float)x0 - (float)x[index]) / ((float)x[index + 1] - (float)x[index])
* ((float)y[index + 1] - (float)y[index])
+ (float)y[index];
}
*y0 = k;
}
void interpolation(const float *x, const unsigned short *y, int Num, float x0, unsigned short *y0)
{
int i, index;
float k;
if (x0 <= x[0])
{
k = y[0];
}
else if (x0 >= x[Num - 1])
{
k = y[Num - 1];
}
else
{
for (i = 0; i < Num; i++)
{
if (x0 < x[i])
break;
}
index = i - 1;
if ((float)x[index + 1] - (float)x[index] < 0.001)
k = (float)y[index];
else
k = ((float)x0 - (float)x[index]) / ((float)x[index + 1] - (float)x[index])
* ((float)y[index + 1] - (float)y[index])
+ (float)y[index];
}
*y0 = (unsigned short)(k+0.5);
}
int interpolation(unsigned char *x, bool *y, int xNum, unsigned char x0, bool *y0)
{
int i, index;
bool k;
if (x0 <= x[0] || x0 <= x[1])
{
k = y[0];
index = 0;
}
else if (x0 >= x[xNum - 1])
{
k = y[xNum - 2];
index = xNum - 2;
}
else {
for (i = 0; i < xNum; i++)
{
if (x0 < x[i])
break;
}
index = i - 1;
if (abs(x[index + 1] - x0) > abs(x0 - x[index])) {
k = y[index - 1];
}
else {
k = y[index];
}
}
*y0 = k;
return(index);
}