求过三点抛物线的解析式
2017-08-16 本文已影响0人
不听话好孩子
复习一波数学
public class JSZCFC {
/**
* @param args
* 求过三点的抛物线的解析式y=ax*x+bx*x+c
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(getA(new Mybig(0.5d,0.5d), new Mybig(0d, 1d), new Mybig(1d, 1d)));
}
/**
* x1!=0 x2!=0 x1!=x2
* @param i
* @param j
* @param k
* @return
*/
public static BigDecimal[] getA(Mybig i,Mybig j,Mybig k){
BigDecimal a= (
i.y.multiply(k.x).subtract(k.y.multiply(i.x))
.add(i.y.multiply(j.x))
.subtract(j.y.multiply(i.x))
)
.divide(
((i.x.pow(2).multiply(j.x))
.add((i.x.pow(2).multiply(k.x)))
.subtract((j.x.pow(2).multiply(i.x)))
.subtract((k.x.pow(2).multiply(i.x))))
);
BigDecimal c= (a.multiply((j.x.pow(2)).multiply(i.x)
.subtract((a.multiply((i.x.pow(2))).multiply(j.x))))
.add((i.y.multiply(j.x)))
.subtract((j.y.multiply(i.x))))
.divide((
j.x.subtract(i.x)));
BigDecimal b=((i.y.subtract(c).subtract((a.multiply((i.x.pow(2)))))))
.divide(i.x);
return new BigDecimal[]{a,b,c};
}
}
class Mybig{
BigDecimal x,y;
public Mybig(Double x,Double y){
this.x=new BigDecimal(x);
this.y=new BigDecimal(y);
}
}