void SplineInterpolation(int *Y_INTP, int *X, int *Y, int *X_FULL, int L, int RANGE_FULL) { // Y_INTP[RANGE_FULL] = SplineInterpolation(X[L],Y[L],X_FULL[RANGE_FULL]); int i; int left = 0; int mid = 1; int right = 2; for(i = 0; i < RANGE_FULL; i++) { if(mid < L - 1 && i > X[mid]) { left = left + 1; mid = mid + 1; right = right + 1; } if(right < L) { float x0 = (float)X[left], x1 = (float)X[mid], x2 = (float)X[right]; float y0 = (float)Y[left], y1 = (float)Y[mid], y2 = (float)Y[right]; float val = y0 * (i - x1) * (i - x2) / ((x0 - x1) * (x0 - x2)) + y1 * (i - x2) * (i - x0) / ((x1 - x2) * (x1 - x0)) + y2 * (i - x0) * (i - x1) / ((x2 - x0) * (x2 - x1)); Y_INTP[i] = (int)val; } else { if(X[mid] - X[left] == 0) { Y_INTP[i] = Y[mid]; } else { Y_INTP[i] = (Y[mid] * (i - X[left]) + Y[left] * (X[mid] - i)) / (X[mid] - X[left]); } } } return; }