* ベジェ曲線のxの式が三次方程式であるため、その解 t から、ベジェ曲線の y を求める\r
* なお、ニュートン法の初期値はxとする\r
* なぜなら、xの式をみると、xが増加傾向となるスプラインモードでは、係数が負となる可能性が低いため*/\r
- var t = Math.qubicsecant(Ax, Bx, Cx, -x, x-0.001, x);\r
+ var t = _newton(Ax, Bx, Cx, -x, x);\r
return f(Ay*t*t*t + By*t*t + Cy*t);\r
};\r
} else if (this.mode === "discrete") {\r
}\r
} ).to = base("$from").$to;\r
\r
-/*割線法により、三次方程式 a0x^3 + a1x^2 + a2x + a3 の解を求める\r
- * 引数x0, x1は初期値*/\r
-Math.qubicsecant = function(a0, a1, a2, a3, x0, x1) {\r
- var eps = 1e-10,\r
- y0 = a0 *x0*x0*x0 + a1 *x0*x0 + a2*x0 + a3,\r
- y1 = a0 *x1*x1*x1 + a1 *x1*x1 + a2*x1 + a3,\r
- x2 = x0;\r
- if (y1 === 0) {\r
- return x1;\r
- }\r
- /*限界の収束回数は100回とする*/\r
- for (var i=0;i<100;++i) {\r
- if ((y1 < eps) && (y1 > -eps)) {\r
- return x1;\r
- } else {\r
- x2 = x1 - y1 * (x1 - x0) / (y1 - y0);\r
- x0 = x1;\r
- x1 = x2;\r
- y0 = y1;\r
- y1 = a0 *x1*x1*x1 + a1 *x1*x1 + a2*x1 + a3;\r
- }\r
- }\r
- return x2;\r
-};\r
-\r
/*ニュートン法により、三次方程式 a0x^3 + a1x^2 + a2x + a3 の解を求める\r
* 引数bは初期値*/\r
Math.qubicnewton = function(a0, a1, a2, a3, b) {\r