事情是这样的。我想在网站的一些图表中画一些线。这些图表有时会有一两条线。但有时会多几条线,每条线都由任意数学函数定义。
至于现在,我只知道画三条线的可能性:
public class ArbitraryFunctionData {
private double x1;
private double x2;
private double x3;
private double y;
public ArbitraryFunctionData(double x1, doouble x2, double x3, double y) {
this.x1 = x1;
this.x2 = x2;
this.x3 = x3;
this.y = y;
}
public double getX1() {
return x1;
}
public double getX2() {
return x2;
}
public double getX3() {
return x3;
}
public double getY() {
return y;
}
public void setX1(double x1) {
this.x1 = x1;
}
public void setX2(double x2) {
this.x2 = x2;
}
public void setX3(double x3) {
this.x3 = x3;
}
public void setY(double y) {
this.y = y;
}
}
某个地方需要定义这个接口:
public interface ArbitraryFunctionAccess extends
PropertyAccess<ArbitraryFunctionData> {
ValueProvider<ArbitraryFunctionData, Double> x1();
ValueProvider<ArbitraryFunctionData, Double> x2();
ValueProvider<ArbitraryFunctionData, Double> x3();
@Path("x")
ModelKeyProvider<ArbitraryFunctionData> xKey();
}
所以我可以将这些访问函数作为字段添加到图表中:
horizontalAxis.addField(arbFuncAccess.x1());
horizontalAxis.addField(arbFuncAccess.x2());
horizontalAxis.addField(arbFuncAccess.x3());
这是创建图表的一种非常不舒服的方式。有没有更好的方法来做到这一点?
ArbitraryFunctionData
需要预先定义,并且需要手动添加每种访问方法。我宁愿做这样的事情:
ArbitraryFunction f1 = new ArbitraryFunction(0, 5, 0, 5) {
@Override
public double f(double x) {
return x+1;
}
};
ArbitraryFunction f2 = new ArbitraryFunction(0, 5, 0, 5) {
@Override
public double f(double x) {
return x+2;
}
};
store.add(0, f1.getData()); // a line
store.add(1, f2.getData()); // another line
其中 ArbitraryFunctions 函数public double f(double x)
需要被覆盖并ArbitraryFunction.getData()
定义为public List<ArbitraryFunctionData> getData()
. 这会给整个事情增加更多的动态,但问题是,我不能将字段添加到图表中,因为它们需要在public interface ArbitraryFunctionAccess
.
我希望我正确地描述了我的需求。有谁知道可能的解决方案?