我不认为我在这里需要代码,但只是这样你才能看到我在看的东西:
public class Valuation {
//line is a monotonic (non-decreasing. Could be constant at points)
//line in 2D space where x=0 -> y=0 and x=1 -> y=1
//the gradient cannot be infinite
//line is only defined between x=0 and x=1. Can catch when arguments to
//functions are unacceptable given this.
LineEquation line;
float cut(float from, float value){
//Using 'from' as x, return the least value x' where 'value' is the difference
//between the y value returned by x and the y value returned by x'
}
float eval(float from, float to){
//require to > from
//return the difference between the y value returned by 'to'
//and the y value returned by 'from'
}
我的问题是如何在Java中表示这样的线/曲线?我可以验证给定的行符合我的要求,但我想让这个LineEquation类能够处理任何符合这些要求的行。这些可以是二次曲线或线,其中我们有类似的东西,当x在0和0.5之间时,方程是a,然后当x在0.5和1之间时,方程是b。我很沮丧地想到你可以描述符合规范的线路的所有方法,然后我将如何完成所有这些,以及我将如何以不同的方式处理所有不同的类型。不幸的是,我没有词汇来找到一个有我想要的库。
答案 0 :(得分:-1)
如果你正在使用Java 8,那么最简单的做法可能是将曲线存储为Function<Float,Float>
,它可以为任何类型的曲线实现任何类型的方程式,{{ 1}}对于任何给定的y
都是单值的,而x
始终属于x
的范围。
你的课可能会是这样的。
float
然后您可以使用
等调用创建这些内容public class Valuation {
final Function<Float,Float> curve;
public Valuation(final Function<Float,Float> curve) {
this.curve = curve;
}
float eval(float from, float to){
return curve.apply(to) - curve.apply(from);
}
}
表示典型的单调二次方或
new Valuation( x -> ( x * x + 2 * x + 3 ))
表示由两个线性部分组成的分段函数。
我还没有显示new Valuation( x -> ( x > 0.5 ? 3 * x : 1 + x ))
的代码。不得不把事情留给你!