客户需求情况:要求支持曲线图,并且业务数据中不存在负值,要求曲线中也不存在负值。
目前报表工具所提供的统计图:时间趋势图和折线图,在数据点连续且很密集的情况下,计算出来图形,近似可看作曲线图。但如果客户数据库中只有少量关键点数据,且数据离散,采用以上两种统计图,画出来的图形就不是平滑曲线,而是折线。
这次实现的曲线图,就是在少量且离散的数据状态下,采用拉格朗日插值算法,图形通过各离散点,绘制平滑曲线。
要绘制平滑曲线,各个离散点之间的连接曲线,可以看做是若干点的集合,这些点是通过拉格朗日插值算法插入的虚拟数据点。
提供算法如下:
/**
* 拉格朗日插值算法
* @param points ArrayList,所有点
* @param deltaX int, 插值的X
* @return int,插值朗日后的Y
*/
private double Lagrange(ArrayList points, double deltaX, int BottomY) {
double sum = 0;
double L;
for (int i = 0; i < points.size(); i++) {
L = 1;
Point pi = (Point) points.get(i);
for (int j = 0; j < points.size(); j++) {