BounceInterpolator
的源码如下:
package android.view.animation;
public class BounceInterpolator extends BaseInterpolator {
public BounceInterpolator() {
}
private static float bounce(float t) {
return t * t * 8.0f;
}
public float getInterpolation(float t) {
t *= 1.1226f;
if (t < 0.3535f) return bounce(t);
else if (t < 0.7408f) return bounce(t - 0.54719f) + 0.7f;
else if (t < 0.9644f) return bounce(t - 0.8526f) + 0.9f;
else return bounce(t - 1.0435f) + 0.95f;
}
}
从float getInterpolation(float input)
的实现,可以知道,这个是精心设计的分段二次曲线。
在Matlab中创建一个bounce.m
文件,编写一个函数,实现如下:
function [ y ] = bounce( x )
y=x.*x.*8.0;
end
在Matlab中创建一个bounceInterpolator.m
文件,编写一个函数,实现如下:
function [ y ] = bounceInterpolator( x )
x = x*1.1226;
if (x < 0.3535)
y = bounce(x);
elseif (x < 0.7408)
y = bounce(x - 0.54719) + 0.7;
elseif (x < 0.9644)
y = bounce(x - 0.8526) + 0.9;
else
y = bounce(x - 1.0435) + 0.95;
end
end
在Matlab的命令窗口中输入如下命令:
x=linspace(0,1,100);
y=zeros(1,100);
for i = 1:1:100
y(i)=bounceInterpolator(x(i));
end
plot(x,y);
title('bounceInterpolator');
grid on
得到下面的曲线图:
从图中可以看出,随着之间的推移,会出现3次反弹,但最终静止在目的地了。