BounceInterpolator

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次反弹,但最终静止在目的地了。