好的,所以我最近一直在研究插值。可悲的是,几乎每篇我读过的文章都只讨论了十进制0.0到1.0的插值。我想插入整数整数,无论它们有多大或者是否有负数或其他什么。我用线性插值完成了这个:
public int interpolate(int y1, int y2, int length, int x){
return y1 + x * (y2 - y1) / (length-1);
}
但是我坚持使用余弦插值。 This伟大的文章讨论了余弦插值,但它是在如上所述的从0.0到1.0的数字系统上。以下是我到目前为止的情况:
public int interpolate(int y1, int y2, int length, int x){
int v = (int)(y2 - Mathf.Cos(x * 3.1415f))/2;
return (y1 + x * (y2 - y1) / (length-1)) * v;
}
它不起作用虽然它返回一个几乎随机的数字而没有真正的方向使它根本不光滑。这是我需要你帮助的地方。长话短说:如何制作处理整数的余弦插值函数?
答案 0 :(得分:1)
你需要
(int) ((1+cos(pi*x / (length-1)))/2 * (y1-y2)+y2)
当角度从0变为pi时,余弦从1变为-1。加1并除以2得到一个很好的函数,从1到0。其余的是转换参数。