//求一元三次方程,网上找的
Math_yyz=(function(){
var module={};
function eqZero(x){
return Math.abs(x)<1e-6;
}
var abs=Math.abs;
var pow=Math.pow;
var sqrt=Math.sqrt;
var sign=Math.sign;
var cos=Math.cos;
var acos=Math.acos;
var TwoPi=Math.PI*2;
function getCubicRoot(a,b,c,d){
a=a;
b=b/(3*a);
c=c/(6*a);
d=d/(2*a);
var solve=[null,null,null];
var Alph=-b*b*b+3*b*c-d;
var Beta=b*b-2*c;
var Delt=Alph*Alph-Beta*Beta*Beta;
var R1,R2,tht;
if (eqZero(Delt)){
R1=abs(pow(abs(Alph),1/3))*sign(Alph);
if (eqZero(R1)){
solve[0]=-b;
}
else{
solve[0]=-b+2*R1;
solve[1]=-b-R1;
}
}
else if(Delt>0){
//var tht,R1,R2;
tht=Alph+sqrt(Delt);
R1=abs(pow(abs(tht),1/3))*sign(tht);
tht=Alph-sqrt(Delt);
R2=abs(pow(abs(tht),1/3))*sign(tht);
solve[0]=-b+R1+R2;
}
else if(Delt<0){
//var tht;
tht=acos(Alph/(sqrt(Beta)*Beta));
solve[0]=-b+2*sqrt(Beta)*cos(tht/3);
solve[1]=-b+2*sqrt(Beta)*cos((tht+TwoPi)/3.0);
solve[2]=-b+2*sqrt(Beta)*cos((tht-TwoPi)/3);
}
return solve;
}
module.getCubicRoot=getCubicRoot;
return module;
})();
你的图像是三阶贝塞尔曲线