|
这个算法用过吗
// Catmull-Rom核心插值函数(输入4点,输出插值点)
float catmull_rom(float t, float p0, float p1, float p2, float p3) {
return 0.5 * ((-p0 + 3*p1 -3*p2 +p3)*t*t*t
+ (2*p0 -5*p1 +4*p2 -p3)*t*t
+ (-p0 + p2)*t
+ 2*p1);
}
// 全局插值流程(输入180点,输出1440点)
void interpolate(float input[180], float output[1440]) {
for(int i=0; i<1440; i++) {
float pos = i * (180-1.0) / 1440.0; // 计算原始坐标位置
int idx = (int)pos;
float t = pos - idx;
// 边界处理(复制首尾点)
float p0 = (idx>0) ? input[idx-1] : input[0];
float p1 = input[idx];
float p2 = (idx<179) ? input[idx+1] : input[179];
float p3 = (idx<178) ? input[idx+2] : input[179];
output = catmull_rom(t, p0, p1, p2, p3);
}
} |
|